diff --git a/src/metabase/driver/postgres.clj b/src/metabase/driver/postgres.clj
index dd1e1de4f987bf81b4a82dbdf059cc7c3e7334b1..0b5c1db1cf92e65d22081fffacf863ff6e1f1301 100644
--- a/src/metabase/driver/postgres.clj
+++ b/src/metabase/driver/postgres.clj
@@ -240,7 +240,7 @@
   ;; I tried to write this with Malli but couldn't figure out how to make it work. See
   ;; https://metaboat.slack.com/archives/CKZEMT1MJ/p1676076592468909
   [_fn [amount unit]]
-  {:pre [(int? amount)
+  {:pre [(number? amount)
          (#{:millisecond :second :minute :hour :day :week :month :year} unit)]}
   [(format "INTERVAL '%s %s'" (num amount) (name unit))])
 
diff --git a/test/metabase/driver/postgres_test.clj b/test/metabase/driver/postgres_test.clj
index cc00d80a64ac2bff4a6e8a9221e6b7f433e1efad..82ebe1b9bb43f15ba8914b6bdb1eab3b373ebf05 100644
--- a/test/metabase/driver/postgres_test.clj
+++ b/test/metabase/driver/postgres_test.clj
@@ -54,13 +54,14 @@
 (deftest ^:parallel interval-test
   (is (= ["INTERVAL '2 day'"]
          (sql/format-expr [::postgres/interval 2 :day])))
+  (is (= ["INTERVAL '-2.5 year'"]
+         (sql/format-expr [::postgres/interval -2.5 :year])))
   (are [amount unit msg] (thrown-with-msg?
                           AssertionError
                           msg
                           (sql/format-expr [::postgres/interval amount unit]))
-    2.0  :day  #"\QAssert failed: (int? amount)\E"
-    "2"  :day  #"\QAssert failed: (int? amount)\E"
-    :day 2     #"\QAssert failed: (int? amount)\E"
+    "2"  :day  #"\QAssert failed: (number? amount)\E"
+    :day 2     #"\QAssert failed: (number? amount)\E"
     2    "day" #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E"
     2    2     #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E"
     2    :can  #"\QAssert failed: (#{:day :hour :week :second :month :year :millisecond :minute} unit)\E"))