gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:49:31 25 4
gpt4 key购买 nike

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

最佳答案

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

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

id 的代码是:

def _create(self, cr, user, vals, context=None):
...
...
updates = [
# list of column assignments defined as tuples like:
# (column_name, format_string, column_value)
# (column_name, sql_formula)
# Those tuples will be used by the string formatting for the INSERT
# statement below.
('id', "nextval('%s')+%s" % (self._sequence, 1000000000)),
]

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

data with prefix ids and with begserial id

关于postgresql - 具有不同模式的 2 个 Odoo 8.0 postgresql 数据库之间的数据库复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43249790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com