2017-04-06 183 views
3

我們有我們需要分佈在不同的數據中心相隔萬里(所以延遲需要加以考慮)2個Odoo V8數據庫之間實現複製的情況。數據庫具有不同的模式,表格幾乎相同,但這些表格中的列是不同的,複製需要在數據庫級別進行。所有向客戶發出的警告是,這將繞過ORM,因此任何Python級別的約束都不同,因爲自定義代碼是不同的(Odoo源代碼將是相同的)已經充耳不聞。複製需要發生僅適用於特定表(仍然需要加以澄清),其中一個是sale_order表,但是這意味着任何表指向的關係(外鍵)列需要保持同步,以及。所以,如果銷售訂單有5 PARTNER_ID,這意味着res_partner表必須有兩個數據庫ID爲5行,並在所有匹配的列所需的數據匹配和大量的這些列也將是外鍵列那指向其他表格等等。代碼庫不僅僅是不同,它有很大的不同 - 幾十個完全不同的模塊和數千行代碼。我有點就如何實現這一損失,有一個Odoo模塊(base_synchro),這有可能合作,以得到所需要的結果,但它通過XML-RPC請求的作品,所以沒有在數據庫級別上和因此不是一種選擇。任何人都有類似的東西可以稱重嗎?或者,如果不在兩個數據庫中創建一個完整的混亂,這是不可能的?數據庫複製

回答

1

我們也有這個問題,我們有因爲網絡的損失超過100的公司,我們必須把一個odoo例如在每一個公司,我們需要一箇中央服務器來鞏固統計等爲我們的主要公司數據。我們現在所做的解決方案是在create方法中更改models.py的代碼,以便爲公司生成特殊的ID。

讓我們說,一個公司有code = 120所以我們chaged odoo實現新增的每個ID應該是1200000000 + id所以,當你保存在這家公司的firsr記錄id != 1id = 1200000001和其他company id = 1990000001代碼爲199,所以當我們整合數據,我們不必修復外鍵,因爲我們永遠不會有兩個公司中存在的ID。 即使這個解決方案是不能接受的,因爲我們有很多的公司,我們正在失去大量的數據,所以最大價值,爲id = 9 999 999你。你現在有2個公司,所以現在我們正在改變ID從串口到bigserial的類型,但是這需要大量的代碼編輯,因爲我們不得不修改許多二進制字段和整數字段...

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

+0

這是你的情況是個好主意,但對我們來說是不行的,因爲情況不是由公司分離(任何一家公司可以使用任何一種情況下)。無論如何,我認爲我們會推動使用base_synchro。 –

+0

你犧牲的時間之一,我討厭在odoo中,ID必須是整數 – Cherif