Postgres not recognized as DB type

Hello
I have metabase jar on a Windows server.

I run on H2 for a couple of months and now want to migrate to PostGRES.

I followed the steps described here : Migrating to a production application database | Metabase Documentation

I also used the SET command to set the environment variables described here : Using or migrating from an H2 application database | Metabase Documentation

When running the load-from-H2 command, I have the error in the logs below : basically metabase does not recognize the DB TYPE as postgres.

I check the variables (with echo %MB_DB_TYPE%, echo %MB_DB_NAME%, echo %MB_DB_PORT%, …) and all variables are set properly.

Any idea why metabase throws this error?

note that the PostGres DB is brand new

C:\Metabase>java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 C:/Metabase/metabase.db
2025-12-19 09:18:42,279 INFO metabase.util :: Maximum memory available to JVM: 3.9 GB
2025-12-19 09:18:46,497 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance.
For more information, see Redirecting…
Exception in thread "main" java.lang.AssertionError: Assert failed: (#{:postgres :h2 :mysql} db-type)
at metabase.app_db.connection$application_db.invokeStatic(connection.clj:64)
at metabase.app_db.connection$application_db.doInvoke(connection.clj:64)
at clojure.lang.RestFn.invoke(RestFn.java:467)
at metabase.app_db.connection__init.load(Unknown Source)
at metabase.app_db.connection__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:1526)
at metabase.app_db.core$loading__6812__auto____46426.invoke(core.clj:1)
at metabase.app_db.core__init.load(Unknown Source)
at metabase.app_db.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:554)
at metabase.settings.models.setting.cache$loading__6812__auto____46534.invoke(cache.clj:1)
at metabase.settings.models.setting.cache__init.load(Unknown Source)
at metabase.settings.models.setting.cache__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:3897)
at metabase.settings.models.setting$loading__6812__auto____46585.invoke(setting.clj:1)
at metabase.settings.models.setting__init.load(Unknown Source)
at metabase.settings.models.setting__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:485)
at metabase.settings.core$loading__6812__auto____47204.invoke(core.clj:1)
at metabase.settings.core__init.load(Unknown Source)
at metabase.settings.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:554)
at metabase.appearance.settings$loading__6812__auto____49950.invoke(settings.clj:1)
at metabase.appearance.settings__init.load(Unknown Source)
at metabase.appearance.settings__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:424)
at metabase.appearance.core$loading__6812__auto____50151.invoke(core.clj:1)
at metabase.appearance.core__init.load(Unknown Source)
at metabase.appearance.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:622)
at metabase.analytics.settings$loading__6812__auto____51935.invoke(settings.clj:1)
at metabase.analytics.settings__init.load(Unknown Source)
at metabase.analytics.settings__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:1792)
at metabase.analytics.prometheus$loading__6812__auto____54828.invoke(prometheus.clj:1)
at metabase.analytics.prometheus__init.load(Unknown Source)
at metabase.analytics.prometheus__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:554)
at metabase.analytics.core$loading__6812__auto____56812.invoke(core.clj:1)
at metabase.analytics.core__init.load(Unknown Source)
at metabase.analytics.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.invoke(RestFn.java:3897)
at metabase.core.core$loading__6812__auto____124742.invoke(core.clj:1)
at metabase.core.core__init.load(Unknown Source)
at metabase.core.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:543)
at clojure.lang.RT.classForName(RT.java:2229)
at clojure.lang.RT.classForName(RT.java:2238)
at clojure.lang.RT.loadClassForName(RT.java:2257)
at clojure.lang.RT.load(RT.java:469)
at clojure.lang.RT.load(RT.java:444)
at clojure.core$load$fn__6931.invoke(core.clj:6189)
at clojure.core$load.invokeStatic(core.clj:6188)
at clojure.core$load.doInvoke(core.clj:6172)
at clojure.lang.RestFn.invoke(RestFn.java:411)
at clojure.core$load_one.invokeStatic(core.clj:5961)
at clojure.core$load_one.invoke(core.clj:5956)
at clojure.core$load_lib$fn__6873.invoke(core.clj:6003)
at clojure.core$load_lib.invokeStatic(core.clj:6002)
at clojure.core$load_lib.doInvoke(core.clj:5981)
at clojure.lang.RestFn.applyTo(RestFn.java:145)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6044)
at clojure.core$load_libs.doInvoke(core.clj:6028)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6066)
at clojure.core$require.doInvoke(core.clj:6066)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$serialized_require.invokeStatic(core.clj:6142)
at clojure.core$requiring_resolve.invokeStatic(core.clj:6151)
at clojure.core$requiring_resolve.invoke(core.clj:6145)
at metabase.core.bootstrap$_main.invokeStatic(bootstrap.clj:36)
at metabase.core.bootstrap$_main.doInvoke(bootstrap.clj:29)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at metabase.core.bootstrap.main(Unknown Source)

MB_DB_TYPE is not set to a valid value. Make sure you have spelled “postgres” correctly (all lower case no ‘ql’) and there are no spaces in the value.

Hello

Good thinking to double check the variables :grinning_face_with_smiling_eyes:

In my case, I think the variables are properly set, as I checked with the echo command.

I also run the cmd as administrator.

Any idea what the error could be?

C:\Metabase>echo %MB_DB_TYPE%
postgres

C:\Metabase>java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 C:\Metabase\metabase.db
2025-12-22 10:59:18,611 INFO metabase.util :: Maximum memory available to JVM: 3.9 GB
2025-12-22 10:59:22,442 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance.
For more information, see Redirecting…
Exception in thread "main" java.lang.AssertionError: Assert failed: (#{:postgres :h2 :mysql} db-type)
at metabase.app_db.connection$application_db.invokeStatic(connection.clj:64)
at metabase.app_db.connection$application_db.doInvoke(connection.clj:64)

Can you post your start script? (Redact the security key and anything personally identifiable, but keep the structure intact.)

First thank you dwhitemv for your time and attention on this, much appreciated!

I simply follow the 2 tutorials I attached in my first post :

set MB_DB_TYPE=postgres

set MB_DB_DBNAME=metabase

set MB_DB_PORT=5432

set MB_DB_USER=

set MB_DB_PASS=

set MB_DB_HOST=localhost

set MB_DB_CONNECTION_URI="jdbc:postgresql://:5432/metabase?user=&password="

java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 C:\Metabase\metabase.db

I also checked for locks on the H2 database(resource monitoring>CPU>Associated Handles): no lock on this.

It looks like the load_from_h2 does not even start because the MB_DB_TYPE is not recognized, so checking for the lock is just to be on the safe side but does not look like the root cause

Figured this out. Windows environment variables in Command Prompt (cmd) don’t work like environment variables in UNIX/Linux shells. Programs don’t inherit env vars set from the shell SET command. You will need to set them with the SETX command (which puts them into the registry user hive), then relaunch the command prompt. The variables will be set automatically and programs will inherit them.

The syntax for SETX is

SETX variable value

note no equal sign, and “value” must be quoted if it contains spaces.

The alternative is to use PowerShell scripts, where environment variables are inherited by programs launched from the shell. However, the default policy is to disallow PowerShell scripts unless you override it at run time or registry configuration (and they REALLY don’t want you changing this as powershell scripts can touch just about anything and you don’t randos to be able to run them and mess up their systems, or worse).

Long term, the better way to go is to install Metabase as a Windows service. As part of setting up the service, you set up the env vars and it all works. There’s numerous tutorials on how to do this on the web.

Very good points!!

By using setx with the right syntax, I do not have this error any more : postgres is recognized as the DB to be used and the script connects to the postgres DB.

I now have a different error : the connection to the H2 file does not seem to work. I am sure of the path : C:\Metabase\metabase.db.

C:\Metabase>java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar load-from-h2 C:\Metabase\metabase.db
2025-12-23 13:45:23,665 INFO metabase.util :: Maximum memory available to JVM: 3.9 GB
2025-12-23 13:45:27,597 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance.
For more information, see Redirecting…
2025-12-23 13:45:46,531 INFO driver.impl :: Registered abstract driver :sql
2025-12-23 13:45:46,625 INFO driver.impl :: Registered abstract driver :sql-jdbc (parents: [:sql])
2025-12-23 13:45:46,649 INFO driver.impl :: Registered driver :h2 (parents: [:sql-jdbc])
2025-12-23 13:45:49,893 INFO driver.impl :: Registered driver :mysql (parents: [:sql-jdbc])
2025-12-23 13:45:49,959 INFO driver.impl :: Registered driver :postgres (parents: [:sql-jdbc])
2025-12-23 13:45:51,053 INFO core.core ::
Metabase v0.55.12 (7e5b41e)

Copyright © 2025 Metabase, Inc.

Metabase Enterprise Edition extensions are NOT PRESENT.
2025-12-23 13:45:51,155 INFO driver.impl :: Registered abstract driver :metabase.driver.sql-jdbc.execute.legacy-impl/use-legacy-classes-for-read-and-set
2025-12-23 13:45:51,170 INFO driver.impl :: Registered abstract driver :metabase.driver.sql.query-processor.empty-string-is-null/empty-string-is-null
2025-12-23 13:45:51,449 INFO cmd.copy :: Set up h2 source database and run migrations...
2025-12-23 13:45:51,452 INFO app-db.setup :: Verifying h2 Database Connection ...
2025-12-23 13:45:51,896 ERROR cmd.copy :: [FAIL]

clojure.lang.ExceptionInfo: ERROR Set up h2 source database and run migrations...: Unable to connect to Metabase h2 DB. {}
at metabase.cmd.copy$do_step$fn__115374.invoke(copy.clj:40)
at metabase.cmd.copy$do_step.invokeStatic(copy.clj:36)
at metabase.cmd.copy$do_step.invoke(copy.clj:34)
at metabase.cmd.copy$copy_BANG_.invokeStatic(copy.clj:414)
at metabase.cmd.copy$copy_BANG_.invoke(copy.clj:402)
at metabase.cmd.load_from_h2$load_from_h2_BANG_.invokeStatic(load_from_h2.clj:36)
at metabase.cmd.load_from_h2$load_from_h2_BANG_.invoke(load_from_h2.clj:26)
at clojure.lang.Var.invoke(Var.java:386)
at metabase.cmd.core$load_from_h2.invokeStatic(core.clj:76)
at metabase.cmd.core$load_from_h2.invoke(core.clj:70)
at clojure.lang.AFn.applyToHelper(AFn.java:154)
at clojure.lang.AFn.applyTo(AFn.java:144)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:662)
at metabase.cmd.core$run_cmd$fn__124621.invoke(core.clj:335)
at metabase.cmd.core$run_cmd.invokeStatic(core.clj:332)
at metabase.cmd.core$run_cmd.invoke(core.clj:322)
at clojure.lang.Var.invoke(Var.java:395)
at metabase.core.core$run_cmd.invokeStatic(core.clj:217)
at metabase.core.core$run_cmd.invoke(core.clj:216)
at metabase.core.core$entrypoint.invokeStatic(core.clj:241)
at metabase.core.core$entrypoint.doInvoke(core.clj:234)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at clojure.lang.Var.applyTo(Var.java:707)
at clojure.core$apply.invokeStatic(core.clj:667)
at clojure.core$apply.invoke(core.clj:662)
at metabase.core.bootstrap$main.invokeStatic(bootstrap.clj:36)
at metabase.core.bootstrap$main.doInvoke(bootstrap.clj:29)
at clojure.lang.RestFn.applyTo(RestFn.java:140)
at metabase.core.bootstrap.main(Unknown Source)
Caused by: clojure.lang.ExceptionInfo: Unable to connect to Metabase h2 DB. {}
at metabase.app_db.setup$verify_db_connection$fn__46285.invoke(setup.clj:130)
at metabase.app_db.setup$verify_db_connection.invokeStatic(setup.clj:128)
at metabase.app_db.setup$verify_db_connection.invoke(setup.clj:121)
at metabase.app_db.setup$setup_db_BANG
$fn__46324$fn__46325.invoke(setup.clj:202)
at metabase.util.jvm$do_with_us_locale.invokeStatic(jvm.clj:239)
at metabase.util.jvm$do_with_us_locale.invoke(jvm.clj:225)
at metabase.app_db.setup$setup_db_BANG$fn__46324.invoke(setup.clj:198)
at metabase.app_db.setup$setup_db_BANG_.invokeStatic(setup.clj:197)
at metabase.app_db.setup$setup_db_BANG_.invoke(setup.clj:190)
at metabase.cmd.copy$copy_BANG_$fn__115572.invoke(copy.clj:415)
at metabase.cmd.copy$do_step$fn__115374.invoke(copy.clj:37)
... 29 more
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Sequence "SYSTEM_SEQUENCE_DB727F3E_0E5B_4961_BF60_B26F4B07FC27" not found; SQL statement:
CREATE CACHED TABLE "PUBLIC"."SEARCH_INDEX__IQMB0LRDLZE0DOQUHMZJJ"(
"ID" BIGINT GENERATED BY DEFAULT AS IDENTITY SEQUENCE "PUBLIC"."SYSTEM_SEQUENCE_DB727F3E_0E5B_4961_BF60_B26F4B07FC27" SELECTIVITY 100 NOT NULL,
"SEARCH_TERMS" CHARACTER VARYING SELECTIVITY 77,
"NATIVE_SEARCH_TERMS" CHARACTER VARYING SELECTIVITY 77,
"MODEL" CHARACTER VARYING(32) SELECTIVITY 1 NOT NULL,
"DISPLAY_DATA" CHARACTER VARYING SELECTIVITY 78 NOT NULL,
"LEGACY_INPUT" CHARACTER VARYING SELECTIVITY 100 NOT NULL,
"CREATED_AT" TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP SELECTIVITY 1 NOT NULL,
"UPDATED_AT" TIMESTAMP WITH TIME ZONE SELECTIVITY 1 NOT NULL,
"ARCHIVED" BOOLEAN DEFAULT FALSE SELECTIVITY 1 NOT NULL,
"MODEL_UPDATED_AT" TIMESTAMP WITH TIME ZONE SELECTIVITY 35,
"PINNED" BOOLEAN SELECTIVITY 1,
"COLLECTION_ID" INTEGER SELECTIVITY 12,
"OFFICIAL_COLLECTION" BOOLEAN SELECTIVITY 1,
"NAME" CHARACTER VARYING SELECTIVITY 73 NOT NULL,
"LAST_EDITED_AT" TIMESTAMP WITH TIME ZONE SELECTIVITY 18,
"DASHBOARDCARD_COUNT" INTEGER SELECTIVITY 1,
"DASHBOARD_ID" INTEGER SELECTIVITY 1,
"LAST_EDITOR_ID" INTEGER SELECTIVITY 1,
"MODEL_ID" CHARACTER VARYING SELECTIVITY 84,
"LAST_VIEWED_AT" TIMESTAMP WITH TIME ZONE SELECTIVITY 17,
"DATABASE_ID" INTEGER SELECTIVITY 1,
"CREATOR_ID" INTEGER SELECTIVITY 2,
"VIEW_COUNT" INTEGER SELECTIVITY 7,
"MODEL_CREATED_AT" TIMESTAMP WITH TIME ZONE SELECTIVITY 98,
"VERIFIED" BOOLEAN SELECTIVITY 1
) [90036-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:632)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
at org.h2.message.DbException.get(DbException.java:223)
at org.h2.message.DbException.get(DbException.java:199)
at org.h2.schema.Schema.getSequence(Schema.java:650)
at org.h2.command.Parser.readSequence(Parser.java:8464)
at org.h2.command.Parser.parseColumnForTable(Parser.java:6026)
at org.h2.command.Parser.parseTableColumnDefinition(Parser.java:9331)
at org.h2.command.Parser.parseCreateTable(Parser.java:9271)
at org.h2.command.Parser.parseCreate(Parser.java:6784)
at org.h2.command.Parser.parsePrepared(Parser.java:763)
at org.h2.command.Parser.parse(Parser.java:689)
at org.h2.command.Parser.parse(Parser.java:661)
at org.h2.command.Parser.prepare(Parser.java:537)
at org.h2.engine.SessionLocal.prepare(SessionLocal.java:581)
at org.h2.engine.SessionLocal.prepare(SessionLocal.java:565)
at org.h2.engine.MetaRecord.prepareAndExecute(MetaRecord.java:75)
at org.h2.engine.Database.executeMeta(Database.java:660)
at org.h2.engine.Database.executeMeta(Database.java:634)
at org.h2.engine.Database.(Database.java:357)
at org.h2.engine.Engine.openSession(Engine.java:92)
at org.h2.engine.Engine.openSession(Engine.java:222)
at org.h2.engine.Engine.createSession(Engine.java:201)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338)
at org.h2.jdbc.JdbcConnection.(JdbcConnection.java:122)
at org.h2.Driver.connect(Driver.java:59)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:613)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:222)
at metabase.app_db.data_source.DataSource.getConnection(data_source.clj:78)
at clojure.java.jdbc$get_connection.invokeStatic(jdbc.clj:372)
at clojure.java.jdbc$get_connection.invoke(jdbc.clj:274)
at clojure.java.jdbc$db_query_with_resultset_STAR_.invokeStatic(jdbc.clj:1111)
at clojure.java.jdbc$db_query_with_resultset_STAR_.invoke(jdbc.clj:1093)
at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1182)
at clojure.java.jdbc$query.invoke(jdbc.clj:1144)
at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1160)
at clojure.java.jdbc$query.invoke(jdbc.clj:1144)
at metabase.app_db.setup$can_connect_with_spec_QMARK_.invokeStatic(setup.clj:117)
at metabase.app_db.setup$can_connect_with_spec_QMARK_.invoke(setup.clj:115)
at metabase.app_db.setup$verify_db_connection$fn__46285.invoke(setup.clj:128)
... 39 more
Command failed with exception: ERROR Set up h2 source database and run migrations...: Unable to connect to Metabase h2 DB.

any idea?

Looks like metabase was shut down in the middle of something. Odd time for it to create a search index but that’s what it wants to do, but it was incomplete and the related sequence is missing.

Try starting up Metabase normally, let it come up all the way, then shut it down and try your migration again. If you get the same error then your H2 db has some corruption that is going to need fixing.

Hello Doug

I got the same error while trying to start metabase from the metabase.db.mv.db.

So it is corrupted, unfortunately.

Anything I can do to fix it? It has 3 months of dashboard design in it, and it would be great to migrate the same to postgres.

Thanks

Hubert

The way forward here is to delete the in-progress search table creation so the instance will start up.

Create a text file in your Metabase directory called purge_search.sql and put this in it:

DELETE FROM "PUBLIC"."SEARCH_INDEX_METADATA";

Next, back up your metabase.db.mv.db file.

Then, run Metabase like this to execute the SQL and purge the search_index_metadata table (this should make it forget it was in the middle of an index build when it crashed):

java --add-opens java.base/java.nio=ALL-UNNAMED -cp metabase.jar org.h2.tools.RunScript -script purge_search.sql -url jdbc:h2:C:\Metabase\metabase.db

Nothing will be output if it’s successful.

Afterward, start Metabase up normally and make sure it starts successfully on the h2 app database. If it does, shut down cleanly (try to wait for any database syncs or index builds to finish) and re-attempt your migration.