PostgresqlJDBCAdapter with table prefix errors when executing createSchemaStatements.

Solution Verified - Updated -

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 of over 48,000 articles and solutions.

Current Customers and Partners

Log in for full access

Log In
Close

Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.