Uploaded image for project: 'Crowd Data Center'
  1. Crowd Data Center
  2. CWD-6377

PostgreSQL JDBC driver 42.7.5 has issues with checking for the existence of database tables if the database name is uppercase

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Medium Medium
    • None
    • 6.3.0, 6.2.4, 6.3.1
    • Backup / Restore
    • None

      Issue Summary

      PostgreSQL JDBC driver 42.7.5 has issue( https://github.com/liquibase/liquibase/issues/6666) with checking for the existence of database tables if the database name is uppercase.

      After upgrading Crowd from 6.1.0 to 6.3.0 using an existing uppercase-named PostgreSQL database, liquibase tries to create its own "cwd_databasechangelog" table although that one already exists, and fails. The issue happens since we started bundling postgresql-42.7.5.jar as part of 6.3.0 version.

      Steps to Reproduce

      1. Install crowd 6.1.0 or 6.2.0 using a database with upper case name.
      2. Upgrade Crowd to 6.3.0
      3. Below error is logged under the logs -
        • 2025-06-09 04:04:18,627 main INFO [liquibase.lockservice] Successfully released change log lock
          2025-06-09 04:04:18,632 main ERROR [crowd.console.listener.StartupListener] Failed to initialise Crowd container
          java.lang.RuntimeException: liquibase.exception.DatabaseException: ERROR: relation "cwd_databasechangelog" already exists [Failed SQL: (0) CREATE TABLE crowd_v5_preprod.cwd_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 com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.runLiquibaseUpdate(LiquibaseSchemaHelper.java:159) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.lambda$updateSchemaIfNeeded$1(LiquibaseSchemaHelper.java:76) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.withServiceRegistry(LiquibaseSchemaHelper.java:178) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.withServiceRegistry(LiquibaseSchemaHelper.java:164) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.updateSchemaIfNeeded(LiquibaseSchemaHelper.java:75) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          at com.atlassian.crowd.console.listener.StartupListener.migrateAndUpgradeCrowd(StartupListener.java:220) ~[classes/:?]
          at com.atlassian.crowd.console.listener.StartupListener.checkLicenseAndPerformUpgrade(StartupListener.java:134) ~[classes/:?]
          at com.atlassian.crowd.console.listener.StartupListener.lambda$contextInitialized$2(StartupListener.java:76) ~[classes/:?]
          at java.base/java.util.Optional.ifPresentOrElse(Optional.java:198) [?:?]
          at com.atlassian.crowd.console.listener.StartupListener.contextInitialized(StartupListener.java:71) [classes/:?]
          at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4018) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4460) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) [catalina.jar:9.0.98]
          at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599) [catalina.jar:9.0.98]
          at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:603) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:680) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1844) [catalina.jar:9.0.98]
          at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) [?:?]
          at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
          at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.98]
          at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123) [?:?]
          at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:575) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:466) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:109) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:389) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:336) [catalina.jar:9.0.98]
          at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:776) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:721) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) [catalina.jar:9.0.98]
          at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1203) [catalina.jar:9.0.98]
          at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1193) [catalina.jar:9.0.98]
          at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
          at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.98]
          at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145) [?:?]
          at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:749) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:211) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardService.startInternal(StandardService.java:415) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) [catalina.jar:9.0.98]
          at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:874) [catalina.jar:9.0.98]
          at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164) [catalina.jar:9.0.98]
          at org.apache.catalina.startup.Catalina.start(Catalina.java:739) [catalina.jar:9.0.98]
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
          at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
          at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[?:?]
          at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345) [bootstrap.jar:9.0.98]
          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473) [bootstrap.jar:9.0.98]
          Caused by: liquibase.exception.DatabaseException: ERROR: relation "cwd_databasechangelog" already exists [Failed SQL: (0) CREATE TABLE crowd_v5_preprod.cwd_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:440) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:78) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:161) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:126) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.changelog.StandardChangeLogHistoryService.init(StandardChangeLogHistoryService.java:282) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.checkLiquibaseTables(Liquibase.java:1922) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.lambda$update$1(Liquibase.java:224) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.lambda$child$0(Scope.java:180) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:189) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:179) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:158) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.runInScope(Liquibase.java:2414) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.update(Liquibase.java:209) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.update(Liquibase.java:195) ~[liquibase-core-4.16.1.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.runLiquibaseUpdate(LiquibaseSchemaHelper.java:154) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          ... 50 more
          Caused by: org.postgresql.util.PSQLException: ERROR: relation "cwd_databasechangelog" already exists
          at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2733) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2420) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:372) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:517) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:434) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:356) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:341) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:317) ~[postgresql-42.7.5.jar:42.7.5]
          at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:312) ~[postgresql-42.7.5.jar:42.7.5]
          at com.mchange.v2.c3p0.impl.NewProxyStatement.execute(NewProxyStatement.java:75) ~[c3p0-0.9.5.5.jar:0.9.5.5]
          at liquibase.executor.jvm.JdbcExecutor$ExecuteStatementCallback.doInStatement(JdbcExecutor.java:436) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:78) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:161) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.executor.jvm.JdbcExecutor.execute(JdbcExecutor.java:126) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.changelog.StandardChangeLogHistoryService.init(StandardChangeLogHistoryService.java:282) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.checkLiquibaseTables(Liquibase.java:1922) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.lambda$update$1(Liquibase.java:224) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.lambda$child$0(Scope.java:180) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:189) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:179) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Scope.child(Scope.java:158) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.runInScope(Liquibase.java:2414) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.update(Liquibase.java:209) ~[liquibase-core-4.16.1.jar:?]
          at liquibase.Liquibase.update(Liquibase.java:195) ~[liquibase-core-4.16.1.jar:?]
          at com.atlassian.crowd.util.persistence.hibernate.LiquibaseSchemaHelper.runLiquibaseUpdate(LiquibaseSchemaHelper.java:154) ~[crowd-persistence-hibernate5-6.3.0.jar:?]
          ... 50 more
          2025-06-09 04:04:18,649 main ERROR [crowd.console.listener.StartupListener] Errors experienced during the Crowd upgrade process: []
          2025-06-09 04:04:18,649 main INFO [com.atlassian.crowd.startup] System Information:
          2025-06-09 04:04:18,650 main INFO [com.atlassian.crowd.startup] Timezone: Eastern Standard Time
          2025-06-09 04:04:18,650 main INFO [com.atlassian.crowd.startup] Java Version: 17.0.14
          2025-06-09 04:04:18,651 main INFO [com.atlassian.crowd.startup] Java Vendor: Red Hat, Inc.
          2025-06-09 04:04:18,652 main INFO [com.atlassian.crowd.startup] JVM Version: 17.0.14+7-LTS
          2025-06-09 04:04:18,652 main INFO [com.atlassian.crowd.startup] JVM Vendor: Red Hat, Inc.
          2025-06-09 04:04:18,653 main INFO [com.atlassian.crowd.startup] JVM Runtime: OpenJDK 64-Bit Server VM
          2025-06-09 04:04:18,653 main INFO [com.atlassian.crowd.startup] Username: crowd
          2025-06-09 04:04:18,653 main INFO [com.atlassian.crowd.startup] Operating System: Linux5.14.0-503.35.1.el9_5.x86_64
          2025-06-09 04:04:18,653 main INFO [com.atlassian.crowd.startup] Architecture: amd64
          2025-06-09 04:04:18,654 main INFO [com.atlassian.crowd.startup] File Encoding: UTF-8
          2025-06-09 04:04:18,654 main INFO [com.atlassian.crowd.startup] JVM Statistics:
          2025-06-09 04:04:18,656 main INFO [com.atlassian.crowd.startup] Total Memory: 1024MB
          2025-06-09 04:04:18,657 main INFO [com.atlassian.crowd.startup] Used Memory: 406MB
          2025-06-09 04:04:18,658 main INFO [com.atlassian.crowd.startup] Free Memory: 617MB
          2025-06-09 04:04:18,658 main INFO [com.atlassian.crowd.startup] Runtime Information:
          2025-06-09 04:04:18,658 main INFO [com.atlassian.crowd.startup] Version: 6.3.0
          2025-06-09 04:04:18,658 main INFO [com.atlassian.crowd.startup] Build Number: 2301
          2025-06-09 04:04:18,658 main INFO [com.atlassian.crowd.startup] Build Date: 2025-04-09
          2025-06-09 04:04:18,658 main INFO [crowd.console.listener.StartupListener] Upgrades not performed since the application has not been setup yet.
          

      Expected Results

      The upgrade from Crowd 6.1.0 to 6.3.0 with the upper-case PostgreSQL database name to go smoothly.

      Actual Results

      The upgrade fails with Caused by: org.postgresql.util.PSQLException: ERROR: relation "cwd_databasechangelog" already exists.

      Workaround

      • Manually replace the postgresql-42.7.5.jar JDBC driver with an older one, postgresql-42.7.4.jar, from Crowd 6.2.0 in Crowd installation directory, <CROWD_INSTALL_DIR>/apache-tomcat//lib/
        OR
      • If feasible, change the database name to lowercase and then reattempt the upgrade.

            [CWD-6377] PostgreSQL JDBC driver 42.7.5 has issues with checking for the existence of database tables if the database name is uppercase

            There are no comments yet on this issue.

              Unassigned Unassigned
              02495d088b9f Saurabh Bhatia
              Affected customers:
              1 This affects my team
              Watchers:
              3 Start watching this issue

                Created:
                Updated: