2017-04-06 6 views
3

수천 마일 떨어진 서로 다른 데이터 센터에있는 2 개의 Odoo v8 데이터베이스간에 복제를 구현해야하는 상황이 있습니다. 따라서 대기 시간을 고려해야합니다. 데이터베이스는 스키마가 다르지만 테이블은 거의 동일하지만이 테이블의 열은 다르며 복제는 데이터베이스 수준에서 이루어져야합니다. 이것이 ORM을 우회하여 커스텀 코드가 다르기 (Odoo 소스가 동일 할 것이기 때문에)가 다른 파이썬 레벨 제약 조건을 무시할 것이라는 모든 경고는 귀가 먹은 귀에 들었습니다. 복제는 특정 테이블에서만 발생해야하며 (여전히 명확해야 함) sales_order 테이블 중 하나가 필요하지만 관계 (외래 키) 열이 가리키는 테이블도 동기화되어야 함을 의미합니다. 따라서 판매 주문의 partner_id 값이 5 인 경우 res_partner 테이블에 두 데이터베이스의 ID가 5 인 행이 있어야하며 일치하는 모든 열의 데이터가 일치해야하며 그 많은 열도 외래 키 열입니다. 다른 테이블 등을 가리킨다. 코드 기반은 완전히 다르지 않습니다. 수십 개의 전혀 다른 모듈과 수천 줄의 코드가 있습니다. 나는 이것을 구현하는 방법에 대한 손실이 조금있다. Odoo 모듈 (base_synchro)이있다. 이것은 xml-rpc 요청을 통해 작동한다는 점을 제외하면 필요한 결과를 얻기 위해 잠재적으로 작동 할 수있다. 따라서 옵션이 아닙니다. 누구나 체중 검사를 할 수있는 유사한 경험이 있습니까? 또는 두 데이터베이스 모두에서 완전한 혼란을 일으키지 않고 수행하는 것이 불가능합니까?다른 스키마가있는 Odoo 8.0 postgresql 데이터베이스 2 개 사이의 데이터베이스 복제

답변

1

우리는 네트워크 손실로 인해 모든 회사에 odoo 인스턴스를 추가해야하므로 100 개 이상의 회사를 보유하고 있으며 통계를 위해 주요 회사의 데이터를 통합하기 위해 중앙 서버가 필요했습니다. 우리가 지금하고있는 해법은 정확하게 create 메소드에서 models.py의 코드를 변경하여 회사의 특별한 id를 생성하는 것입니다.

하자이 회사는 code = 120 그래서 우리는 코드 199로 id != 1하지만 id = 1200000001company id = 1990000001 것은 그래서 우리는 데이터를 통합 할 때이 회사의 firsr 기록을 저장할 때 너무 1200000000 + id을해야합니다 모든 ID를 추가 odoo 구현을 chaged가 있다고 우리 우리는 두 회사에 존재하는 ID를 가지지 않기 때문에 외래 키를 수정할 필요가 없었습니다. 우리는 많은 데이터를 잃어 버리기 때문에이 솔루션조차도 받아 들여지지 않았습니다. 따라서 id = 9 999 999의 최대 가치를 얻을 수 있습니다. 당신은 2 회사가 너무 많습니다 id = 999 999 999 지금 우리는 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

+0

. 어쨌든, 나는 base_synchro의 사용을 추진할 것이라고 생각한다. –

+0

당신은 id가 정수 여야한다는 것을 odoo에서 싫어하는 것 중 하나를 희생합니다. – Cherif