如何在Bucardo Postgresql多主机中处理序列

如何在Bucardo Postgresql多主机中处理序列,postgresql,replication,database-replication,bucardo,Postgresql,Replication,Database Replication,Bucardo,我们正在三个不同的Postgresql服务器上建立一个数据库(将来可能还会有更多),目前使用bucardo多主组同步所有表 我们没有同步序列;我们试过了,我们注意到bucardo在同一个表、不同服务器上同时写入数据时会使我们丢失数据。因为它们使用相同的键,所以在同步时间bucardo选择删除其中一个重复行 我们当前的方法是在数据库的每个实例上手动命名序列的名称空间。例如,实例1保持原样,所有实例2表序列更新为从2^31/10开始,实例3表序列将更改为从2^31/10*2开始。。实例10序列从2^

我们正在三个不同的Postgresql服务器上建立一个数据库(将来可能还会有更多),目前使用bucardo多主组同步所有表

我们没有同步序列;我们试过了,我们注意到bucardo在同一个表、不同服务器上同时写入数据时会使我们丢失数据。因为它们使用相同的键,所以在同步时间bucardo选择删除其中一个重复行

我们当前的方法是在数据库的每个实例上手动命名序列的名称空间。例如,实例1保持原样,所有实例2表序列更新为从2^31/10开始,实例3表序列将更改为从2^31/10*2开始。。实例10序列从2^31/10*9开始


您对这种方法有什么看法?对于Bucardo多主机设置,您还有什么其他建议?Postgresql BDR不是一个选项,因为它还不被认为是一个稳定的版本。

序列不能在使用Bucardo的多源设置中复制,因为会出现冲突

以不同的大数字开始序列是一种常见、有效的方法。对我来说,这是一个关于:

  • 如果对自动增量主键应用“语义含义”,如“插入顺序”
  • 你如何解释这些数据
  • 将在每个数据库中生成的预期行数。例如,如果大多数行仅从一个源生成,那么在所有源中放置相同数量的可用自动增量可能不是最佳策略
如果同步中只涉及两个源,我的首选策略是对一个使用奇数,对另一个使用偶数

如果有多达九个数据源,对我来说,将自动增量值设置为10的数据很容易推理,并以不同的数字1、2、。。。所以,“第一个数据库”将生成1,11,21。。。第二个2,12,22。。。这种方法的一个好处是,如果您从四个源开始,并且需要另一个源,那么不应该更改任何内容。在您建议的策略中,如果您在4个数据库之间分割所有可用空间,并且需要再次分割另一个数据库,那么空间将更加困难

如果您不局限于使用自动增量主键,那么其他好的选择是使用UUID,但这是肯定的