Uploaded image for project: 'Red Hat build of Keycloak'
  1. Red Hat build of Keycloak
  2. RHBK-3242

Liquibase update failed from KC 26.1 to KC 26.2 with PostgreSQL JDBC driver 42.7.5 [GHI#39917]

XMLWordPrintable

    • False
    • Hide

      None

      Show
      None
    • False

      Before reporting an issue

      [x] I have read and understood the above terms for submitting issues, and I understand that my issue may be closed without action if I do not follow them.

      Area

      storage

      Describe the bug

      Liquibase failed with Exception during update to KC 26.2 and PostgreSQL JDBC driver 42.7.5

      looks like Liquibase fails to detect databasechangelog table and crashes with PostgreSQL JDBC driver 42.7.5

      Downgrade to 42.7.4 solved the problem

      Version

      26.2.4

      Regression

      [x] The issue is a regression

      Expected behavior

      No Exception

      Actual behavior

      2025-05-05 12:30:29,479 INFO  [com.arjuna.ats.jbossatx] (main) ARJUNA032014: Stopping transaction recovery manager
      2025-05-05 12:30:29,505 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (production) mode
      2025-05-05 12:30:29,505 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) Error details:: java.lang.RuntimeException: Failed to update database
      	at org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider.update(QuarkusJpaUpdaterProvider.java:120)
      	at org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider.update(QuarkusJpaUpdaterProvider.java:83)
      	at org.keycloak.quarkus.runtime.storage.database.jpa.QuarkusJpaConnectionProviderFactory.update(QuarkusJpaConnectionProviderFactory.java:281)
      	at org.keycloak.quarkus.runtime.storage.database.jpa.QuarkusJpaConnectionProviderFactory.createOrUpdateSchema(QuarkusJpaConnectionProviderFactory.java:263)
      	at org.keycloak.quarkus.runtime.storage.database.jpa.QuarkusJpaConnectionProviderFactory.postInit(QuarkusJpaConnectionProviderFactory.java:124)
      	at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:168)
      	at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:165)
      	at org.keycloak.services.DefaultKeycloakSessionFactory.initializeProviders(DefaultKeycloakSessionFactory.java:165)
      	at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:145)
      	at org.keycloak.services.DefaultKeycloakSessionFactory.initProviderFactories(DefaultKeycloakSessionFactory.java:126)
      	at org.keycloak.quarkus.runtime.integration.QuarkusKeycloakSessionFactory.init(QuarkusKeycloakSessionFactory.java:87)
      	at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.createSessionFactory(QuarkusKeycloakApplication.java:67)
      	at org.keycloak.services.resources.KeycloakApplication.startup(KeycloakApplication.java:90)
      	at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication.onStartupEvent(QuarkusKeycloakApplication.java:52)
      	at org.keycloak.quarkus.runtime.integration.jaxrs.QuarkusKeycloakApplication_Observer_onStartupEvent_GNZ8m5QenZ9h9VNelo7awjUZFDE.notify(Unknown Source)
      	at io.quarkus.arc.impl.EventImpl$Notifier.notifyObservers(EventImpl.java:365)
      	at io.quarkus.arc.impl.EventImpl$Notifier.notify(EventImpl.java:347)
      	at io.quarkus.arc.impl.EventImpl.fire(EventImpl.java:81)
      	at io.quarkus.arc.runtime.ArcRecorder.fireLifecycleEvent(ArcRecorder.java:163)
      	at io.quarkus.arc.runtime.ArcRecorder.handleLifecycleEvents(ArcRecorder.java:114)
      	at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy_0(Unknown Source)
      	at io.quarkus.runner.recorded.LifecycleEventsBuildStep$startupEvent1144526294.deploy(Unknown Source)
      	at io.quarkus.runner.ApplicationImpl.doStart(Unknown Source)
      	at io.quarkus.runtime.Application.start(Application.java:101)
      	at io.quarkus.runtime.ApplicationLifecycleManager.run(ApplicationLifecycleManager.java:121)
      	at io.quarkus.runtime.Quarkus.run(Quarkus.java:77)
      	at org.keycloak.quarkus.runtime.KeycloakMain.start(KeycloakMain.java:145)
      	at org.keycloak.quarkus.runtime.cli.Picocli.start(Picocli.java:988)
      	at org.keycloak.quarkus.runtime.cli.command.AbstractStartCommand.run(AbstractStartCommand.java:49)
      	at picocli.CommandLine.executeUserObject(CommandLine.java:2030)
      	at picocli.CommandLine.access$1500(CommandLine.java:148)
      	at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2465)
      	at picocli.CommandLine$RunLast.handle(CommandLine.java:2457)
      	at picocli.CommandLine$RunLast.handle(CommandLine.java:2419)
      	at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2277)
      	at picocli.CommandLine$RunLast.execute(CommandLine.java:2421)
      	at picocli.CommandLine.execute(CommandLine.java:2174)
      	at org.keycloak.quarkus.runtime.cli.Picocli.parseAndRun(Picocli.java:128)
      	at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:116)
      	at org.keycloak.quarkus.runtime.KeycloakMain.main(KeycloakMain.java:71)
      	at io.quarkus.bootstrap.runner.QuarkusEntryPoint.doRun(QuarkusEntryPoint.java:68)
      	at io.quarkus.bootstrap.runner.QuarkusEntryPoint.main(QuarkusEntryPoint.java:36)
      Caused by: liquibase.exception.CommandExecutionException: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: FEHLER: Relation »databasechangelog« existiert bereits [Failed SQL: (0) CREATE TABLE public.databasechangelog (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED TIMESTAMP WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INTEGER NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255), DEPLOYMENT_ID VARCHAR(10))]
      	at liquibase.command.CommandScope.execute(CommandScope.java:258)
      	at liquibase.Liquibase.lambda$update$0(Liquibase.java:216)
      	at liquibase.Scope.lambda$child$0(Scope.java:191)
      	at liquibase.Scope.child(Scope.java:200)
      	at liquibase.Scope.child(Scope.java:190)
      	at liquibase.Scope.child(Scope.java:169)
      	at liquibase.Liquibase.runInScope(Liquibase.java:1290)
      	at liquibase.Liquibase.update(Liquibase.java:205)
      	at liquibase.Liquibase.update(Liquibase.java:188)
      	at liquibase.Liquibase.update(Liquibase.java:175)
      	at org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider.updateChangeSet(QuarkusJpaUpdaterProvider.java:190)
      	at org.keycloak.quarkus.runtime.storage.database.liquibase.QuarkusJpaUpdaterProvider.update(QuarkusJpaUpdaterProvider.java:105)
      	... 41 more
      Caused by: liquibase.exception.DatabaseException: liquibase.exception.DatabaseException: FEHLER: Relation »databasechangelog« existiert bereits [Failed SQL: (0) CREATE TABLE public.databasechangelog (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED TIMESTAMP WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INTEGER NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255), DEPLOYMENT_ID VARCHAR(10))]
      	at liquibase.executor.jvm.ChangelogJdbcMdcListener.execute(ChangelogJdbcMdcListener.java:40)
      	at liquibase.changelog.StandardChangeLogHistoryService.init(StandardChangeLogHistoryService.java:275)
      	at liquibase.command.core.helpers.DatabaseChangelogCommandStep.checkLiquibaseTables(DatabaseChangelogCommandStep.java:141)
      	at liquibase.command.core.helpers.DatabaseChangelogCommandStep.run(DatabaseChangelogCommandStep.java:91)
      	at liquibase.command.CommandScope.execute(CommandScope.java:220)
      	... 52 more
      Caused by: liquibase.exception.DatabaseException: FEHLER: Relation »databasechangelog« existiert bereits [Failed SQL: (0) CREATE TABLE public.databasechangelog (ID VARCHAR(255) NOT NULL, AUTHOR VARCHAR(255) NOT NULL, FILENAME VARCHAR(255) NOT NULL, DATEEXECUTED TIMESTAMP WITHOUT TIME ZONE NOT NULL, ORDEREXECUTED INTEGER NOT NULL, EXECTYPE VARCHAR(10) NOT NULL, MD5SUM VARCHAR(35), DESCRIPTION VARCHAR(255), COMMENTS VARCHAR(255), TAG VARCHAR(255), LIQUIBASE VARCHAR(20), CONTEXTS VARCHAR(255), LABELS VARCHAR(255), DEPLOYMENT_ID VARCHAR(10))]
      	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:476)
      	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:83)
      	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:185)
      	at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:153)
      	at liquibase.changelog.StandardChangeLogHistoryService.lambda$init$1(StandardChangeLogHistoryService.java:275)
      	at liquibase.executor.jvm.ChangelogJdbcMdcListener.lambda$execute$0(ChangelogJdbcMdcListener.java:33)
      	at liquibase.Scope.lambda$child$0(Scope.java:191)
      	at liquibase.Scope.child(Scope.java:200)
      	at liquibase.Scope.child(Scope.java:190)
      	at liquibase.Scope.child(Scope.java:169)
      	at liquibase.executor.jvm.ChangelogJdbcMdcListener.execute(ChangelogJdbcMdcListener.java:32)
      	... 56 more
      Caused by: org.postgresql.util.PSQLException: FEHLER: Relation »databasechangelog« existiert bereits
      	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733)
      	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420)
      	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372)
      	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517)
      	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434)
      	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:356)
      	at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:341)
      	at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:317)
      	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:312)
      	at io.agroal.pool.wrapper.StatementWrapper.execute(StatementWrapper.java:220)
      	at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:470)
      	... 66 more
      

      How to Reproduce?

      Use a DB with a uppercase database name for example: jdbc:postgresql://localhost:<port>/<UPPERCASE_DB_NAME>

      Anything else?

      No response

              Unassigned Unassigned
              pvlha Pavel Vlha
              Keycloak Cloud Native
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Created:
                Updated:
                Resolved: