PostgreSQL 10逻辑复制:双重条目或主键冲突

时间:2018-06-07 13:58:49

标签: postgresql postgresql-10 logical-replication

我已经建立了一个主人 - >使用PostgreSQL 10进行slave设置,将来自某些特定表的数据同步到从机(即公共系统)。现在,在整个过程中,我遇到了一些奇怪的行为:有些表根本没有同步。

查看PostgreSQL日志时遇到以下错误消息:

2018-06-07 15:28:30.163 CEST [4134] LOG:  worker process: logical replication worker for subscription 18249 sync 17956 (PID 6706) exited with exit code 1

2018-06-07 15:28:30.183 CEST [6707] ERROR:  duplicate key value violates unique constraint "producttext_pk"

2018-06-07 15:28:30.183 CEST [6707] DETAIL:  Key (id)=(100) already exists.

2018-06-07 15:28:30.183 CEST [6707] CONTEXT:  COPY producttext, line 1

为了进一步分析,我删除了从机上该表上的主键,在这种情况下,错误不再发生,但现在我在表中得到重复的条目。

防止重复条目的唯一方法是将主键放在适当的位置,但是当同步保持在四个表上时,同步不会工作,永远不会转移到其余的表。

我已经检查了角色和所有者,并且这些设置正确。如上所述,没有主键,一切都会同步,不会抛出错误,但会创建重复的条目。

我可能在这一点上遗漏了什么?非常感谢。

1 个答案:

答案 0 :(得分:0)

您错过了您无法在备用数据库中的表中插入行,这些行可能与从主数据库复制的文件冲突。

如果您需要同时插入主要和备用,您需要确保主要密钥不会发生冲突,例如:只在一个奇数ID和另一个奇数ID上插入偶数ID。