postgresql – Postgres序列不同步
我正在使用bucardo和postgres运行多主设置.
我发现我的一些表序列彼此不同步.特别是自动增加的id. 例: db1 – table1 INSERT INTO distributors (did,dname) VALUES (DEFAULT,'XYZ Widgets') 新行的ID为1 db2 – table1 INSERT INTO distributors (did,'XYZ Widgets') 新行的ID为1 db2上新行的id应为2,因为bucardo已从db1复制数据,但db2的自动增量基于: nextval('oauth_sessions_id_seq'::regclass) 如果我们检查“oauth_sessions_id_seq”,我们会将最后一个值视为0. phew ……有道理吗? 无论如何,我可以做以下任何一项吗? >使用bucardo复制会话表,以便共享每个数据库的会话? 如果您有任何更好的想法,请随时将它们扔进去.问题只是问,感谢您的帮助. 解决方法
您将不得不更改您的ID生成方法,因为根据FAQ中的此注释没有Bucardo解决方案.
由于Bucardo使用触发器,因此它不能“看到”序列更改,只能“查看”表中的数据,它会复制.序列是不支持触发器的有趣对象,但您可以手动更新它们.我想你可以在INSERT之前添加类似下面的代码,但仍然可能存在问题. SELECT setval('oauth_sessions_id_seq',(SELECT MAX(did) FROM distributors)); 有关更多信息,请参见this question. 我没有完全了解所涉及的所有问题,但您可以手动执行最大计算并在重试循环中执行插入操作.我怀疑如果你实际上在两个数据库上插入并允许Bucardo复制,它会起作用,但是如果你能保证一次只更新一个数据库,那么你可以尝试类似UPSERT重试循环的东西.有关详细信息,请参阅this post.循环的“胆量”可能如下所示: INSERT INTO distributors (did,dname) VALUES ((SELECT max(did)+1 FROM distributors),'XYZ Widgets'); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |