具有不同模式的2个Odoo 8.0 postgresql数据库之间的数据库复制

时间:2017-04-06 08:30:27

标签: postgresql openerp odoo-8 psql database-replication

我们需要在距离数千英里的不同数据中心的2个Odoo v8数据库之间实现复制(因此需要考虑延迟)。数据库具有不同的模式,表几乎相同,但这些表中的列不同,复制需要在数据库级别进行。对客户端的所有警告都会绕过ORM,因此任何不同的Python级别约束,因为自定义代码不同(Odoo源将是相同的)已经被置若罔闻。复制只需要对某些表进行复制(仍需要澄清),其中一个是sale_order表,但这意味着关系(外键)列指向的任何表也需要同步。因此,如果销售订单的partner_id为5,则表示res_partner表必须在两个数据库中都有一个ID为5的行,并且所有匹配列中的数据都需要匹配,并且很多这些列也将是外键列指向其他表等等。代码库不仅仅是不同的,它有很大的不同 - 几十个完全不同的模块和数千行代码。我对如何实现这个有点不知所措,有一个Odoo模块(base_synchro),它可能有助于获得所需的结果,除了它通过xml-rpc请求工作,所以不在数据库级别和因此不是一种选择。任何人都有类似可以称重的东西的经验吗?或者,如果不在两个数据库中创建完整的混乱,这是不可能做到的?

1 个答案:

答案 0 :(得分:1)

我们也有这个问题,我们有超过100家公司因为网络损失我们必须在每家公司放置一个odoo实例,我们需要一个中央服务器来整合我们主要公司的数据以进行统计等等。我们现在正在做的解决方案是在create方法中更改models.py的代码以生成公司的特殊ID。

假设一家公司有一个code = 120,所以我们将odoo实现添加到每个id都应该1200000000 + id,所以当你在这家公司保存第一条记录id != 1但是{{ 1}}和其他id = 1200000001代码为199,因此当我们整合数据时,我们不必修复外键,因为我们永远不会有两个公司中存在的ID。 即使这个解决方案也不被接受,因为我们有很多公司,我们正在丢失大量数据,所以我们company id = 1990000001的最大价值就是你。你有2家公司所以max id = 9 999 999现在我们正在将id的类型从serial更改为bigserial但是这需要大量的代码编辑,因为我们必须修改many2one字段和整数字段......

id的代码是:

id = 999 999 999

当然,您可以通过代码当前用户的company_id来使其动态化。

data with prefix ids and with begserial id

相关问题