【问题标题】:Primary-key collisions in multi-master replication environment using django使用 django 的多主复制环境中的主键冲突
【发布时间】:2021-07-07 22:14:41
【问题描述】:
我有一个使用 Postgres 和 Bucardo 的多主复制设置。最重要的是,我有一个 Django 应用程序。
由于我不断遇到主键冲突,因此设置无法完全正常工作。由于复制被配置为克隆整个数据库,因此我有点相信 Postgres 的序列 ID 正在更新,我想知道是不是 Django 将最后一个序列 ID 号保存在内存中的某个位置。如果是这样,是否有人暗示可以采取什么措施来解决此问题?
提前致谢
【问题讨论】:
标签:
sql
django
postgresql
bucardo
【解决方案1】:
在不知道如何处理冲突的情况下尝试多主机复制是鲁莽的。
这种情况很简单:在每个节点上定义序列,这样值就不会发生冲突。如果你有两个数据库,那就是:
CREATE SEQUENCE tab_id_seq START WITH 1 INCREMENT BY 2; -- on one database
CREATE SEQUENCE tab_id_seq START WITH 2 INCREMENT BY 2; -- on the other database
但您会遇到其他难以解决的复制冲突。