pg_restore.exe를 사용하기 전에 제약 조건 비활성화


16

pg_restore.exe데이터베이스에서 덤프 파일 을 실행하려고하면 수십 가지 오류가 모두 발생합니다.

ERROR: insert or update on table "someTable" violates foreign key constraint "aConstraintName"

이것은 분명히 덤프 파일에서 데이터베이스를 복원하기 전에 데이터베이스를 비웠다는 사실 때문입니다. ...

호출하기 전에 모든 테이블에 대해 제약 조건 및 모든 외래 키를 비활성화 pg_restore.exe하고 나중에 제약 조건 및 외래 키를 다시 활성화 하는 방법이 있습니까?

SO에서 흥미로운 점을 발견했습니다 : 시간을 커밋하기 위해 제약 조건 검사 연기 . 그러나 제약 조건을 연기 한 후 pg_restore.exe내부에서 전화 할 수 있다고 생각하지 않습니다 psql.exe.

10 년 전으로 거슬러 올라간 이 게시물 도 있으며, 제약 조건을 삭제하고 다시 추가 할 것을 제안합니다. 또는 pg_class reltriggers의 값을 0으로 변경하면 제약 조건에서도 가능합니다 ...하지만 좋은 연습보다 해킹이 더 두렵습니다 ...

이 경우 가장 좋은 방법은 무엇입니까? 사용 pg_dump.exe -clean플래그 데이터베이스를 복원 할 때 검사 제약을 우회 덤프를 작성?


사람이 나중에 발견 한 경우, 여기에 교차 게시 : stackoverflow.com/questions/12093654/...을
크레이그 벨소리를

답변:


28

--disable-triggers옵션을 사용해 보셨습니까 pg_restore?

설명서에 따라 : 데이터를 다시로드하는 동안 호출하지 않으려는 테이블에서 참조 무결성 검사 또는 기타 트리거가있는 경우이 옵션을 사용하십시오.

이 옵션 은 --data-only복원 에만 유효 하며 --superuser=username옵션도 전달 해야합니다 .


그리고 그것은 매력처럼 작동합니다 ...
Stephane Rolland
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.