2014-02-27 3 views
1

다중 데이터베이스 환경에서 데이터베이스의 모든 데이터를 다른 데이터베이스로 이동하는 방법은 무엇입니까?Django - 여러 데이터베이스 간 데이터 동기화

설정은 다음과 같습니다 :이 작업을 수행 할 수있는 간단한 솔루션/응용 프로그램은

DATABASES = { 
    'default': {}, 
    'users': { 
     'NAME': 'user_data', 
     'ENGINE': 'django.db.backends.sqlite3', 
     'USER': 'user', 
     'PASSWORD': 'superS3cret' 
    }, 
    'customers': { 
     'NAME': 'customer_data', 
     'ENGINE': 'django.db.backends.postgresql_psycopg2', 
     'USER': 'cust', 
     'PASSWORD': '[email protected]' 
    } 
} 

있습니까? 일방향 마이그레이션만으로도 충분합니다. 복잡한 외래 키와 다 대다 연결을 사용하는 수십 개의 모델과 개체가 있기 때문에 모델과 개체를 반복하고 다른 개체로 저장해도 문제가 해결되지 않습니다.

도 객체 생성이 신호를 사용하여 nother 객체를 만들기 때문에 고유 키가 엉망입니다.

백엔드가 다르므로 SQL 덤프를 사용하는 것이 쉬운 일은 아닙니다. 나는 이것을 시도해 보았는데, sqlite3 데이터베이스에서 psql 덤프를 만들 수 없었다. 외래 키를 엉망으로 만든다.

그래서 데이터베이스에서 다른 데이터베이스로 데이터를로드하지만 신호를 보내지 않으며 외래 키와도 잘 작동하는 솔루션이 필요합니다. 그러나 나는 이것을하는 것을 찾을 수 없었다.

+1

에 대한 django-extensions runscript

사용하여 해당 스크립트를 실행 것! – WeizhongTu

+0

'pg_dump'와'pg_restore'를 사용 하시겠습니까? –

+0

@CraigRinger 두 데이터베이스 모두 psql 백엔드를 사용하면 좋을 것 같습니다. sqlite3 덤프는 psql 덤프와 직접 호환되지 않습니다. 다른 한편으로, 나는 이미 문제를 해결했다. 내 대답을 보라. – kdani

답변

1

마지막으로 나는 이것을 해결할 수있었습니다.

나는

manage.py syncdb --all 
manage.py migrate --fake 

로드로 인해 무결성 문제에 작동하지 않았다 loaddata와 덤프를 사용하여 테이블을 만들었습니다. (예를 들어 깨진 외래 키 제약 조건)

그래서 테이블을 변경해야했습니다. 깨진 제약 조건을 제거한 다음 아무런 문제없이 loaddata을 실행할 수있었습니다.

그러나 몇 가지 제약 조건을 삭제 한 이후 데이터베이스가 여전히 손상되었습니다. 그러므로 나는 단지 psql 셸을 사용하여 테이블을 다시 변경해야했습니다.

pgAdmin은 사용자 친화적 인 인터페이스에 관련 덤프 쿼리를 보여주기 때문에 편리합니다.

-1

난 그냥, migrate the instance from one Database to another에 대한 파이썬 스크립트를 작성 예를

나는이 기능을 너무 필요
# Move Foo table data from one to another 
for each_foo in Foo.objects.using("users").all(): 
    # _create foo instance in customer_data 
    foo_obj, status = Foo.objects.using("customers").get_or_create(
              foo_name=each_foo.foo_name, 
              foo_code=each_foo.foo_code)