我们在使用PostgreSQL数据库的DAS(WSO2)中遇到错误。由于某些原因,我们不知道用一些跟踪信息填充了PostgreSQL日志:
< 2017-02-23 14:04:52.276 CET >ERROR: relation "anx__8gohuwju" does not exist at character 15
< 2017-02-23 14:04:52.276 CET >STATEMENT: SELECT 1 FROM ANX__8GOHUwJU LIMIT 1
< 2017-02-23 14:04:52.277 CET >ERROR: relation "anx__8gaxmlni" does not exist at character 15
< 2017-02-23 14:04:52.277 CET >STATEMENT: SELECT 1 FROM ANX__8GAXMlnI LIMIT 1
< 2017-02-23 14:04:52.278 CET >ERROR: relation "anx__8gicci_y" does not exist at character 15
< 2017-02-23 14:04:52.278 CET >STATEMENT: SELECT 1 FROM ANX__8GICCI_Y LIMIT 1
...
...
...
< 2017-02-23 14:04:57.335 CET >STATEMENT: INSERT INTO ANX__7LvafTvw (partition_key, timestamp, data, record_id) VALUES ($1, $2, $3, $4)
< 2017-02-23 14:04:57.337 CET >ERROR: duplicate key value violates unique constraint "anx__7lvaftvw_pkey"
< 2017-02-23 14:04:57.337 CET >DETAIL: Key (record_id)=(770425a8-b65b-37ad-ad13-6bd45014ef9a) already exists.
< 2017-02-23 14:04:57.337 CET >STATEMENT: INSERT INTO ANX__7LvafTvw (partition_key, timestamp, data, record_id) VALUES ($1, $2, $3, $4)
< 2017-02-23 14:04:57.431 CET >ERROR: duplicate key value violates unique constraint "anx__7lvaftvw_pkey"
< 2017-02-23 14:04:57.431 CET >DETAIL: Key (record_id)=(da6cfb07-4aff-3bb2-9c71-8f3e6d749762) already exists.
< 2017-02-23 14:04:57.431 CET >STATEMENT: INSERT INTO ANX__7LvafTvw (partition_key, timestamp, data, record_id) VALUES ($1, $2, $3, $4)
< 2017-02-23 14:04:57.433 CET >ERROR: duplicate key value violates unique constraint "anx__7lvaftvw_pkey"
< 2017-02-23 14:04:57.433 CET >DETAIL: Key (record_id)=(da6cfb07-4aff-3bb2-9c71-8f3e6d749762) already exists.
< 2017-02-23 14:04:57.433 CET >STATEMENT: INSERT INTO ANX__7LvafTvw (partition_key, timestamp, data, record_id) VALUES ($1, $2, $3, $4)
< 2017-02-23 14:04:57.776 CET >ERROR: duplicate key value violates unique constraint "anx__7lvaftvw_pkey"
< 2017-02-23 14:04:57.776 CET >DETAIL: Key (record_id)=(c7c32813-51c6-34dd-8a34-e76add9839b6) already exists.
< 2017-02-23 14:04:57.776 CET >STATEMENT: INSERT INTO ANX__7LvafTvw (partition_key, timestamp, data, record_id) VALUES ($1, $2, $3, $4)*
我们不知道是因为它正在发生,还是DAS和PostgreSQL之间的错误或兼容性故障。每5秒钟重复一次出现在日志中的错误痕迹,而不会停止填充数据库的日志并导致系统停止工作。
如您所见,有两种类型的错误:
我们已经使用DAS的多个实例和不同的PostgresSQL对它进行了测试,结果是相同的。这是怎么回事?
我已将DAS配置为使用PostgreSQL数据库进行配置(master-datasources.xml)和事件(analytics-datasources.xml)。我们所做的测试使用的是PostgreSQL 9.3和9.6,结果相同。
尽管您看到的日志具有令人震惊的性质,但据我所知,DAS和PostgreSQL之间没有发生意外情况。
这两个日志都是预期的,因为对于数据访问操作,DAS会在提交之前检查表是否存在。如果表不存在,通常会在数据库端产生错误。这是正常的。
另外,对记录的INSERT OVERWRITE操作将尝试作为INSERT,然后如果该记录已经存在(即,违反唯一约束),则将更新记录。这是由于9.5版之前的PostgreSQL中的MERGE语句不可用,以及由于始终不停执行UPDATE调用的相对性能缺陷。
至于您的解决方案,取消注释“ recordMergeQuery”是完全可以接受的,但前提是您使用的是PostgreSQL 9.5+。否则,写操作将失败。在这种情况下,我们使用INSERT ... ON CONFLICT UPDATE
Postgres提供的新语法(请参见[2])。
如果您需要任何进一步的说明,请随时提出。
链接:
[1] https://wiki.postgresql.org/wiki/SQL_MERGE
[2] https://github.com/wso2/carbon-analytics/blob/v1.3.6/features/analytics-data-connectors/org .wso2.carbon.analytics.datasource.rdbms.server.feature / src / main / resources / conf / analytics / rdbms-config.xml#L152
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句