2011-03-30 3 views
0

동일한 응용 프로그램의 서로 다른 버전간에 데이터를 마이그레이션하는 데 도움이되는 python 스크립트를 작성하려고합니다.두 개의 다른 데이터베이스에서 동일한 테이블을 비교하는 Python 스크립트

내가 시작하기 전에 비슷한 것을하는 스크립트 나 모듈이 있는지 알고 싶습니다. 적어도 내 것을 사용하기 시작하거나 사용할 수 있습니다. 아이디어는 특정 테이블간에 데이터를 diff 한 다음 이전 버전 데이터베이스에 적용 할 SQL INSERT 문으로 diff를 저장하는 것입니다.

참고 : 스키마의 얼굴이

는 일반적으로 논리가

def diff_table(table1, table2): 
    # return all rows in table 2 that are not in table1 
    pass 

def persist_rows_tofile(rows, tablename): 
    # save rows to file 
    pass 

dbnames=('db.v1', 'db.v2') 
tables_to_process = ('foo', 'foobar') 

for table in tables_to_process: 
    table1 = dbnames[0]+'.'+table 
    table2 = dbnames[1]+'.'+table 
    rows = diff_table(table1, table2) 

    if len(rows): 
     persist_rows_tofile(rows, table) 

의 라인을 따라 뭔가 될 변화에이 스크립트는 강력한되지 않습니다는 스크립트를 작성하는 좋은 방법이 아니면 할 수 그것은 개선 될 것인가?. 데이터베이스 연결 등을 캐싱하여 향상시킬 수 있을지 의심됩니다 (SqlAlchemy 등에 익숙하지 않기 때문에 제외되었습니다).

SqlAlchemy를 추가하고 일반적으로 그러한 스크립트를 향상시키는 방법에 대한 팁은 무엇입니까?

답변

0

두 데이터베이스간에 데이터를 이동하려면 pg_comparator을 사용하십시오. 그것은 diff와 SQL과 같은 패치입니다! 그것을 사용하여 열의 순서를 바꿀 수 있지만 열을 분할하거나 병합해야하는 경우 다른 것을 사용해야합니다.

또한 비동기 적으로 데이터베이스를 복제하는 데 사용합니다. cron-job은 매 5 분마다 실행되고 "마스터"데이터베이스의 모든 변경 사항을 "슬레이브"데이터베이스에 푸시합니다. 특히 하나의 테이블 만 배포하거나 테이블 당 모든 열이 필요하지 않은 경우에 특히 편리합니다.

+0

공유 주셔서 감사합니다. 새로운 게시 URL을 알고 계십니까? 당신이 참조하는 페이지에서 일부 링크가 깨졌습니다. – Remco

관련 문제