1

我有一个具有 2 个节点(多主复制)的 Postgres BDR 集群。我创建了一个具有自动增量主键的表,如下所示:

create table t1 (id serial primary key, name text);

我从 node1 在该表上添加了一些值:

insert into t1(name) values('foo');

现在,当我尝试从 node2 向该表中添加另一个值时,我收到该错误:

ERROR:  duplicate key value violates unique constraint "t1_pkey"
DETAIL:  Key (id)=(1) already exists.
4

1 回答 1

3

您的问题是两个数据库都有自己的序列,这些序列是数据库本地的,而不是复制的。这会导致复制冲突。

您可以执行以下操作:

  • 使用 BDR 专有的全局序列
  • START 1 INCREMENT2在一个数据库和另一个数据库中使用一个序列START 2 INCREMENT 2,这样序列值就不会发生冲突。
  • 使用全局唯一的 UUID。
于 2019-02-12T11:29:42.027 回答