[v0.44] [Migration issue] Assert failed: (#{:postgres :h2 :mysql} %)

Hi MB team,

My goal is to migrate from my prototyped H2 database (on my local Windows 11 machine) to an AWS Elastic Beanstalk config with an AWS RDS app database.

It's failing with the below error. I'd love your advice on what to do next, or if this is an application bug in v0.44.

I'm running the following command in Windows CMD:

set MB_DB_TYPE=postgres
set MB_DB_CONNECTION_URI="jdbc:postgresql://:5432/metabase?user=&password="
java -jar metabase.jar load-from-h2 C:\metabase\metabase.db

And I get the following error:

Warning: protocol #'java-time.core/Amount is overwriting function abs
WARNING: abs already refers to: #'clojure.core/abs in namespace: java-time.core, being replaced by: #'java-time.core/abs
WARNING: abs already refers to: #'clojure.core/abs in namespace: java-time, being replaced by: #'java-time/abs
Warning: environ value C:\Program Files\Eclipse Adoptium\jdk-17.0.4.8-hotspot\ for key :java-home has been overwritten with C:\Program Files\Eclipse Adoptium\jdk-17.0.4.8-hotspot
WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance.
2022-08-16 22:41:19,397 INFO metabase.util :: Maximum memory available to JVM: 3.9 GB
Exception in thread "main" java.lang.AssertionError: Assert failed: (#{:postgres :h2 :mysql} %)
at metabase.db.env$env__GT_db_type.invokeStatic(env.clj:39)
at metabase.db.env$env__GT_db_type.invoke(env.clj:39)
at metabase.db.env__init.load(Unknown Source)
at metabase.db.env__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at clojure.lang.RT.classForName(RT.java:2209)
at clojure.lang.RT.classForName(RT.java:2218)
at clojure.lang.RT.loadClassForName(RT.java:2237)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6908.invoke(core.clj:6161)
at clojure.core$load.invokeStatic(core.clj:6160)
at clojure.core$load.doInvoke(core.clj:6144)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5933)
at clojure.core$load_one.invoke(core.clj:5928)
at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
at clojure.core$load_lib.invokeStatic(core.clj:5974)
at clojure.core$load_lib.doInvoke(core.clj:5953)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6016)
at clojure.core$load_libs.doInvoke(core.clj:6000)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6038)
at clojure.core$require.doInvoke(core.clj:6038)
at clojure.lang.RestFn.invoke(RestFn.java:436)
at metabase.db.connection$loading__6789__auto____20106.invoke(connection.clj:1)
at metabase.db.connection__init.load(Unknown Source)
at metabase.db.connection__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at clojure.lang.RT.classForName(RT.java:2209)
at clojure.lang.RT.classForName(RT.java:2218)
at clojure.lang.RT.loadClassForName(RT.java:2237)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6908.invoke(core.clj:6161)
at clojure.core$load.invokeStatic(core.clj:6160)
at clojure.core$load.doInvoke(core.clj:6144)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5933)
at clojure.core$load_one.invoke(core.clj:5928)
at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
at clojure.core$load_lib.invokeStatic(core.clj:5974)
at clojure.core$load_lib.doInvoke(core.clj:5953)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6016)
at clojure.core$load_libs.doInvoke(core.clj:6000)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6038)
at clojure.core$require.doInvoke(core.clj:6038)
at clojure.lang.RestFn.invoke(RestFn.java:457)
at metabase.db$loading__6789__auto____35568.invoke(db.clj:1)
at metabase.db__init.load(Unknown Source)
at metabase.db__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at clojure.lang.RT.classForName(RT.java:2209)
at clojure.lang.RT.classForName(RT.java:2218)
at clojure.lang.RT.loadClassForName(RT.java:2237)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6908.invoke(core.clj:6161)
at clojure.core$load.invokeStatic(core.clj:6160)
at clojure.core$load.doInvoke(core.clj:6144)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invokeStatic(core.clj:5933)
at clojure.core$load_one.invoke(core.clj:5928)
at clojure.core$load_lib$fn__6850.invoke(core.clj:5975)
at clojure.core$load_lib.invokeStatic(core.clj:5974)
at clojure.core$load_lib.doInvoke(core.clj:5953)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$load_libs.invokeStatic(core.clj:6016)
at clojure.core$load_libs.doInvoke(core.clj:6000)
at clojure.lang.RestFn.applyTo(RestFn.java:137)
at clojure.core$apply.invokeStatic(core.clj:669)
at clojure.core$require.invokeStatic(core.clj:6038)
at clojure.core$require.doInvoke(core.clj:6038)
at clojure.lang.RestFn.invoke(RestFn.java:3894)
at metabase.core$loading__6789__auto____83702.invoke(core.clj:1)
at metabase.core__init.load(Unknown Source)
at metabase.core__init.(Unknown Source)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:467)
at clojure.lang.RT.classForName(RT.java:2209)
at clojure.lang.RT.classForName(RT.java:2218)
at clojure.lang.RT.loadClassForName(RT.java:2237)
at clojure.lang.RT.load(RT.java:449)
at clojure.lang.RT.load(RT.java:424)
at clojure.core$load$fn__6908.invoke(core.clj:6161)
at clojure.core$load.invokeStatic(core.clj:6160)
at clojure.core$load.doInvoke(core.clj:6144)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.lang.Var.invoke(Var.java:384)
at clojure.lang.Util.loadWithClass(Util.java:251)
at metabase.core.(Unknown Source)

@nish I'm guessing you have redacted the host, user and password.
Just set MB_DB_CONNECTION_URI, or use all the other MB_DB_* variables.
Or try using jdbc:postgres://
Not sure what it is complain, perhaps it's some Windows environment quirk.

Thanks for the quick response!

Unfortunately I've tried both the MB_DB_CONNECTION_URI and MB_DB_* variables. It throws the same error both ways.

Are others successfully migrating from H2 to Postgres in v0.44?

@nish Yes, I just used it a little earlier today:
java -DMB_DB_CONNECTION_URI="jdbc:postgresql://172.17.0.3:5432/mb2?user=pg2&password=password" -jar metabase-0.44.0.jar load-from-h2 metabase.db;
I'm using Java 11: https://www.metabase.com/docs/latest/operations-guide/java-versions.html

Resolved - thanks flamber! I just shutdown local metabase, closed cmd, reopened cmd with admin privileges, and reran with MB_DB_* env variables and it worked fine.

Cheers,
Nish