[ 
https://issues.apache.org/jira/browse/AMQ-3075?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17266301#comment-17266301
 ] 

Ned Wolpert commented on AMQ-3075:
----------------------------------

Matt... I have no insight into this anymore, and no longer have access to an 
environment (production or otherwise) that uses ActiveMQ.

> Auto-create database fails with PostgreSQL (Error in SQL: 'drop primary key')
> -----------------------------------------------------------------------------
>
>                 Key: AMQ-3075
>                 URL: https://issues.apache.org/jira/browse/AMQ-3075
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.4.2
>         Environment: ActiveMQ 5.4.2 fresh install, Ubuntu 64-bit OpenJDK 
> 6b20-1.9.2-0ubuntu1 PostgreSQL 8.4
>            Reporter: Ned Wolpert
>            Assignee: Dejan Bosanac
>            Priority: Major
>             Fix For: 5.5.0
>
>
> Trying to do a fresh install with persistence fails to create the database, 
> with a listed database error.
> Persistence support added to activemq.xml file:
>   <bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
>     <property name="serverName" value="localhost"/>
>     <property name="databaseName" value="activemq"/>
>     <property name="portNumber" value="5432"/>
>     <property name="user" value="activemq"/>
>     <property name="password" value="activemq"/>
>     <property name="dataSourceName" value="postgres"/>
>     <property name="initialConnections" value="1"/>
>     <property name="maxConnections" value="10"/>
>   </bean>
> ....
>         <persistenceAdapter>
>            <jdbcPersistenceAdapter dataSource="#postgres-ds" 
> useDatabaseLock="false"/>
>         </persistenceAdapter>
> postgresql-8.4-701.jdbc4.jar added to the lib directory
> Log from startup:
>  INFO | Pre-instantiating singletons in 
> org.springframework.beans.factory.support.DefaultListableBeanFactory@40b0095d:
>  defining beans 
> [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,postgres-ds,org.apache.activemq.xbean.XBeanBrokerService#0,securityLoginService,securityConstraint,securityConstraintMapping,securityHandler,contexts,Server];
>  root of factory hierarchy
>  WARN | destroyApplicationContextOnStop parameter is deprecated, please use 
> shutdown hooks instead
>  INFO | 
> PListStore:/home/wolpert/Downloads/apache-activemq-5.4.2/data/localhost/tmp_storage
>  started
>  INFO | Using Persistence Adapter: 
> JDBCPersistenceAdapter(org.postgresql.ds.PGPoolingDataSource@3302fc5)
>  INFO | Database adapter driver override recognized for : 
> [postgresql_native_driver] - adapter: class 
> org.apache.activemq.store.jdbc.adapter.PostgresqlJDBCAdapter
>  WARN | Could not create JDBC tables; they could already exist. Failure was: 
> ALTER TABLE ACTIVEMQ_ACKS DROP PRIMARY KEY Message: ERROR: syntax error at or 
> near "PRIMARY"
>   Position: 32 SQLState: 42601 Vendor code: 0
>  WARN | Failure details: ERROR: syntax error at or near "PRIMARY"
>   Position: 32
> org.postgresql.util.PSQLException: ERROR: syntax error at or near "PRIMARY"
>   Position: 32
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062)
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795)
>         at 
> org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353)
>         at 
> org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:345)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at 
> org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455)
>         at $Proxy5.execute(Unknown Source)
>         at 
> org.apache.activemq.store.jdbc.adapter.DefaultJDBCAdapter.doCreateTables(DefaultJDBCAdapter.java:101)
>         at 
> org.apache.activemq.store.jdbc.JDBCPersistenceAdapter.start(JDBCPersistenceAdapter.java:272)
>         at 
> org.apache.activemq.broker.BrokerService.start(BrokerService.java:485)
>         at 
> org.apache.activemq.xbean.XBeanBrokerService.afterPropertiesSet(XBeanBrokerService.java:60)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> ...
> Database reports the following with its log turned on full.
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: SET SESSION CHARACTERISTICS 
> AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
> 2010-12-08 14:35:31 MST LOG:  execute S_1: BEGIN
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: SELECT NULL AS TABLE_CAT, 
> n.nspname AS TABLE_SCHEM, c.relname AS TABLE_NAME,  CASE n.nspname ~ '^pg_' 
> OR n.nspname = 'information_schema'  WHEN true THEN CASE  WHEN n.nspname = 
> 'pg_catalog' OR n.nspname = 'information_schema' THEN CASE c.relkind   WHEN 
> 'r' THEN 'SYSTEM TABLE'   WHEN 'v' THEN 'SYSTEM VIEW'   WHEN 'i' THEN 'SYSTEM 
> INDEX'   ELSE NULL   END  WHEN n.nspname = 'pg_toast' THEN CASE c.relkind   
> WHEN 'r' THEN 'SYSTEM TOAST TABLE'   WHEN 'i' THEN 'SYSTEM TOAST INDEX'   
> ELSE NULL   END  ELSE CASE c.relkind   WHEN 'r' THEN 'TEMPORARY TABLE'   WHEN 
> 'i' THEN 'TEMPORARY INDEX'   ELSE NULL   END  END  WHEN false THEN CASE 
> c.relkind  WHEN 'r' THEN 'TABLE'  WHEN 'i' THEN 'INDEX'  WHEN 'S' THEN 
> 'SEQUENCE'  WHEN 'v' THEN 'VIEW'  ELSE NULL  END  ELSE NULL  END  AS 
> TABLE_TYPE, d.description AS REMARKS  FROM pg_catalog.pg_namespace n, 
> pg_catalog.pg_class c  LEFT JOIN pg_catalog.pg_description d ON (c.oid = 
> d.objoid AND d.objsubid = 0)  LEFT JOIN pg_catalog.pg_class dc ON 
> (d.classoid=dc.oid AND dc.relname='pg_class')  LEFT JOIN 
> pg_catalog.pg_namespace dn ON (dn.oid=dc.relnamespace AND 
> dn.nspname='pg_catalog')  WHERE c.relnamespace = n.oid  AND c.relname LIKE 
> 'ACTIVEMQ_MSGS'  AND (false  OR ( c.relkind = 'r' AND n.nspname !~ '^pg_' AND 
> n.nspname <> 'information_schema' ) )  ORDER BY 
> TABLE_TYPE,TABLE_SCHEM,TABLE_NAME 
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE TABLE 
> ACTIVEMQ_MSGS(ID BIGINT NOT NULL, CONTAINER VARCHAR(250), MSGID_PROD 
> VARCHAR(250), MSGID_SEQ BIGINT, EXPIRATION BIGINT, MSG BYTEA, PRIMARY KEY ( 
> ID ) )
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE INDEX 
> ACTIVEMQ_MSGS_MIDX ON ACTIVEMQ_MSGS (MSGID_PROD,MSGID_SEQ)
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE INDEX 
> ACTIVEMQ_MSGS_CIDX ON ACTIVEMQ_MSGS (CONTAINER)
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE INDEX 
> ACTIVEMQ_MSGS_EIDX ON ACTIVEMQ_MSGS (EXPIRATION)
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE TABLE 
> ACTIVEMQ_ACKS(CONTAINER VARCHAR(250) NOT NULL, SUB_DEST VARCHAR(250), 
> CLIENT_ID VARCHAR(250) NOT NULL, SUB_NAME VARCHAR(250) NOT NULL, SELECTOR 
> VARCHAR(250), LAST_ACKED_ID BIGINT, PRIMARY KEY ( CONTAINER, CLIENT_ID, 
> SUB_NAME))
> 2010-12-08 14:35:31 MST LOG:  execute <unnamed>: CREATE TABLE ACTIVEMQ_LOCK( 
> ID BIGINT NOT NULL, TIME BIGINT, BROKER_NAME VARCHAR(250), PRIMARY KEY (ID) )
> 2010-12-08 14:35:32 MST LOG:  execute <unnamed>: INSERT INTO 
> ACTIVEMQ_LOCK(ID) VALUES (1)
> 2010-12-08 14:35:32 MST LOG:  execute <unnamed>: ALTER TABLE ACTIVEMQ_MSGS 
> ADD PRIORITY BIGINT
> 2010-12-08 14:35:32 MST LOG:  execute <unnamed>: CREATE INDEX 
> ACTIVEMQ_MSGS_PIDX ON ACTIVEMQ_MSGS (PRIORITY)
> 2010-12-08 14:35:32 MST LOG:  execute <unnamed>: ALTER TABLE ACTIVEMQ_ACKS 
> ADD PRIORITY BIGINT DEFAULT 5 NOT NULL
> 2010-12-08 14:35:32 MST ERROR:  syntax error at or near "PRIMARY" at 
> character 32
> 2010-12-08 14:35:32 MST STATEMENT:  ALTER TABLE ACTIVEMQ_ACKS DROP PRIMARY KEY
> 2010-12-08 14:35:32 MST ERROR:  current transaction is aborted, commands 
> ignored until end of transaction block
> 2010-12-08 14:35:32 MST STATEMENT:  ALTER TABLE ACTIVEMQ_ACKS ADD PRIMARY KEY 
> (CONTAINER, CLIENT_ID, SUB_NAME, PRIORITY)
> 2010-12-08 14:35:32 MST LOG:  execute S_2: COMMIT
> 2010-12-08 14:35:32 MST LOG:  execute <unnamed>: SET SESSION CHARACTERISTICS 
> AS TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
> 2010-12-08 14:35:32 MST LOG:  execute S_1: BEGIN
> 2010-12-08 14:35:32 MST ERROR:  relation "activemq_lock" does not exist at 
> character 15
> 2010-12-08 14:35:32 MST STATEMENT:  SELECT * FROM ACTIVEMQ_LOCK FOR UPDATE
> 2010-12-08 14:35:32 MST LOG:  execute S_3: ROLLBACK
> 2010-12-08 14:35:32 MST LOG:  unexpected EOF on client connection
> The specific error is: ALTER TABLE ACTIVEMQ_ACKS DROP PRIMARY KEY
> The first obvious question is why is the primary key being created anyways if 
> your just dropping it. Though its likely due to upgrading the database for 
> 5.4 from an earlier version. If the goal is to drop the 'primary key 
> constraint', the code should execute this instead:
> ALTER TABLE activemq_acks drop constraint activemq_acks_pkey;



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to