diff --git a/src/metabase/driver/generic_sql/metadata.clj b/src/metabase/driver/generic_sql/metadata.clj
new file mode 100644
index 0000000000000000000000000000000000000000..19df7736e600b25638ee55377fc7441931563cc3
--- /dev/null
+++ b/src/metabase/driver/generic_sql/metadata.clj
@@ -0,0 +1,23 @@
+(ns metabase.driver.generic-sql.metadata)
+
+;; TODO - These implementations are wack. We should just use korma to do this instead of raw SQL
+
+(defn field-count
+  [{:keys [db table name] :as field}]
+  (-> ((:native-query @db)
+       (format "SELECT COUNT(\"%s\".\"%s\") FROM \"%s\""
+               (:name (table))
+               name
+               (:name (table))))
+      first
+      :count))
+
+(defn field-distinct-count
+  [{:keys [db table name] :as field}]
+  (-> ((:native-query @db)
+       (format "SELECT COUNT(DISTINCT \"%s\".\"%s\") FROM \"%s\""
+               (:name (table))
+               name
+               (:name (table))))
+      first
+      :count))
diff --git a/src/metabase/driver/h2/metadata.clj b/src/metabase/driver/h2/metadata.clj
new file mode 100644
index 0000000000000000000000000000000000000000..aec44bf192900d763ede880f1714e704a2de2152
--- /dev/null
+++ b/src/metabase/driver/h2/metadata.clj
@@ -0,0 +1,9 @@
+(ns metabase.driver.h2.metadata
+  (:require [metabase.driver.generic-sql.metadata :as generic]
+            [metabase.driver.metadata :as driver]))
+
+(defmethod driver/field-count :h2 [field]
+  (generic/field-count field))
+
+(defmethod driver/field-distinct-count :h2 [field]
+  (generic/field-distinct-count field))
diff --git a/src/metabase/driver/postgres/metadata.clj b/src/metabase/driver/postgres/metadata.clj
index 09c6dadbec2e05bbd6f00bb4b83ddeea22ae0b39..ea92d33314147fb1cc7514bf5fae4610053869c8 100644
--- a/src/metabase/driver/postgres/metadata.clj
+++ b/src/metabase/driver/postgres/metadata.clj
@@ -1,25 +1,9 @@
 (ns metabase.driver.postgres.metadata
-  (:require [metabase.driver.metadata :refer [field-count field-distinct-count]]))
+  (:require [metabase.driver.generic-sql.metadata :as generic]
+            [metabase.driver.metadata :as driver]))
 
-;; TODO - These implementations are wack. We should just use korma to do this
-;; and these should be moved to the `generic-sql` driver
+(defmethod driver/field-count :postgres [field]
+  (generic/field-count field))
 
-(defmethod field-count :postgres
-  [{:keys [db table name] :as field}]
-  (-> ((:native-query @db)
-       (format "SELECT COUNT(\"%s\".\"%s\") FROM \"%s\""
-               (:name (table))
-               name
-               (:name (table))))
-      first
-      :count))
-
-(defmethod field-distinct-count :postgres
-  [{:keys [db table name] :as field}]
-  (-> ((:native-query @db)
-       (format "SELECT COUNT(DISTINCT \"%s\".\"%s\") FROM \"%s\""
-               (:name (table))
-               name
-               (:name (table))))
-      first
-      :count))
+(defmethod driver/field-distinct-count :postgres [field]
+  (generic/field-distinct-count field))