-
Bug
-
Resolution: Unresolved
-
Medium
-
None
-
6.3.0, 6.2.4, 6.3.1
-
None
-
2
-
Severity 3 - Minor
-
2
-
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
- Install crowd 6.1.0 or 6.2.0 using a database with upper case name.
- Upgrade Crowd to 6.3.0
- 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.