PostgresqlJDBCAdapter with table prefix errors when executing createSchemaStatements.
Issue
-
When using PostgresqlJDBCAdapter to auto create the tables and a table prefix statement is also used the create schema statements fail because PostgresqlJDBCAdapter uses a default name for the PK constraint.
-
activemq.xml snippet:
<bean id="postgresPersistenceAdapter" class="org.apache.activemq.store.jdbc.adapter.PostgresqlJDBCAdapter" />
<persistenceAdapter>
<jdbcPersistenceAdapter createTablesOnStartup="true" adapter="#postgresPersistenceAdapter" dataSource="#postgres-ds" lockKeepAlivePeriod="5000" >
<statements>
<statements tablePrefix="LOCAL_" />
</statements>
<locker>
<lease-database-locker lockAcquireSleepInterval="10000" />
</locker>
</jdbcPersistenceAdapter>
</persistenceAdapter>
- Amq log error
2017-09-28 10:06:40,199 | WARN | AMQ-1-thread-1 | DefaultJDBCAdapter | .jdbc.adapter.DefaultJDBCAdapter 117 | 137 - org.apache.activemq.activemq-osgi - 5.11.0.redhat-621169 | Could not create JDBC tables; they could already exist. Failure was: ALTER TABLE LOCAL_ACTIVEMQ_ACKS DROP CONSTRAINT "activemq_acks_pkey" Message: ERROR: constraint "activemq_acks_pkey" of relation "local_activemq_acks" does not exist SQLState: 42704 Vendor code: 0
2017-09-28 10:06:40,200 | WARN | AMQ-1-thread-1 | JDBCPersistenceAdapter | tore.jdbc.JDBCPersistenceAdapter 601 | 137 - org.apache.activemq.activemq-osgi - 5.11.0.redhat-621169 | Failure details: ERROR: constraint "activemq_acks_pkey" of relation "local_activemq_acks" does not exist
org.postgresql.util.PSQLException: ERROR: constraint "activemq_acks_pkey" of relation "local_activemq_acks" does not exist
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2190)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:300)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:428)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:354)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:301)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:287)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:264)[172:org.postgresql.jdbc42:42.1.4]
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:260)[172:org.postgresql.jdbc42:42.1.4]
at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:291)[174:org.apache.commons.dbcp2:2.1.1]
at org.apache.commons.dbcp2.DelegatingStatement.execute(DelegatingStatement.java:291)[174:org.apache.commons.dbcp2:2.1.1]
at org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doCreateTables(DefaultJDBCAdapter.java:110)
Environment
- Red Hat JBoss Fuse
- 6.3.0
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.