diff --git a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
index 464e51f365..211c00eb21 100755
--- a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
+++ b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/LiquibaseJpaUpdaterProvider.java
@@ -109,6 +109,10 @@ public class LiquibaseJpaUpdaterProvider implements JpaUpdaterProvider {
}
LogFactory.setInstance(new LogWrapper());
+
+ // Adding PostgresPlus support to liquibase
+ DatabaseFactory.getInstance().register(new PostgresPlusDatabase());
+
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
if (defaultSchema != null) {
database.setDefaultSchemaName(defaultSchema);
diff --git a/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java
new file mode 100644
index 0000000000..ffea018bcd
--- /dev/null
+++ b/model/jpa/src/main/java/org/keycloak/connections/jpa/updater/liquibase/PostgresPlusDatabase.java
@@ -0,0 +1,56 @@
+package org.keycloak.connections.jpa.updater.liquibase;
+
+import liquibase.database.DatabaseConnection;
+import liquibase.database.core.PostgresDatabase;
+import liquibase.exception.DatabaseException;
+import liquibase.executor.ExecutorService;
+import liquibase.statement.core.RawSqlStatement;
+
+/**
+ * @author Marek Posolda
+ */
+public class PostgresPlusDatabase extends PostgresDatabase {
+
+ public static final String POSTGRESPLUS_PRODUCT_NAME = "EnterpriseDB";
+
+ @Override
+ public String getShortName() {
+ return "postgresplus";
+ }
+
+ @Override
+ protected String getDefaultDatabaseProductName() {
+ return POSTGRESPLUS_PRODUCT_NAME;
+ }
+
+ @Override
+ public boolean isCorrectDatabaseImplementation(DatabaseConnection conn) throws DatabaseException {
+ return POSTGRESPLUS_PRODUCT_NAME.equalsIgnoreCase(conn.getDatabaseProductName());
+ }
+
+ @Override
+ public String getDefaultDriver(String url) {
+ String defaultDriver = super.getDefaultDriver(url);
+
+ if (defaultDriver == null) {
+ if (url.startsWith("jdbc:edb:")) {
+ defaultDriver = "com.edb.Driver";
+ }
+ }
+
+ return defaultDriver;
+ }
+
+ @Override
+ protected String getConnectionSchemaName() {
+ try {
+ String currentSchema = ExecutorService.getInstance().getExecutor(this)
+ .queryForObject(new RawSqlStatement("select current_schema"), String.class);
+ return currentSchema;
+
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to get current schema", e);
+ }
+ }
+
+}
diff --git a/testsuite/integration/pom.xml b/testsuite/integration/pom.xml
index 20f0387621..83596c4ea3 100755
--- a/testsuite/integration/pom.xml
+++ b/testsuite/integration/pom.xml
@@ -502,6 +502,7 @@
${keycloak.connectionsJpa.password}
false
+ ${keycloak.connectionsJpa.liquibaseDatabaseClass}