H2 URL with PostgreSQL mode and jOOQ
Just a quick code snippet to show my future self how I was able to finally get H2 working with a jOOQ query that in production hits a PostgreSQL database. I spent hours trying to get this to work. H2 kept complaining about not being able to find the public
schema when our jOOQ query was attempting to execut a query like select * from "public"."customer"
. It's wasn't the schema it was having trouble with but the quotes. I figured this out by pulling up the H2 console and trying the query with and without quotes and without the quotes it worked. So then I figured out that I needed to somehow tell H2 this was for PostgreSQL. H2 has a MODE option that you can set.
The following is the code snippet that finally worked. I have not optimized it. The
url
value contains all my attempts to get this thing to work. I think it can definitely be trimmed down but that's out of scope for this blog. I'm just trying to save others some time including my future self.import org.springframework.boot.jdbc.DataSourceBuilder; DataSourceBuilder.create() .driverClassName("org.h2.Driver") .url("jdbc:h2:~/.h2/testdb" + ";TRACE_LEVEL_SYSTEM_OUT=3" + ";INIT=create schema if not exists public AUTHORIZATION sa\\" + ";RUNSCRIPT FROM 'classpath:schema.sql'" + ";DB_CLOSE_ON_EXIT=FALSE" + ";SCHEMA=public" + ";MODE=PostgreSQL" + ";DATABASE_TO_LOWER=TRUE") .username("sa") .password("") .build();