PostgreSQL은 구성 옵션을 지원하지 않지만 다른 가능성이 있습니다.
postgres=
Table "public.b"
┌────────┬─────────┬───────────┐
│ Column │ Type │ Modifiers │
╞════════╪═════════╪═══════════╡
│ id │ integer │ │
└────────┴─────────┴───────────┘
Foreign-key constraints:
"b_id_fkey" FOREIGN KEY (id) REFERENCES a(id) DEFERRABLE
Postgres의 참조 무결성은 트리거로 구현되며 테이블에서 트리거를 비활성화 할 수 있습니다. 이 방법을 사용하면 모든 데이터 (위험)를 업로드 할 수 있지만 대용량 데이터를 검사하는 데 비용이 많이 들기 때문에 훨씬 더 빠릅니다. 업로드가 안전하다면 할 수 있습니다.
BEGIN;
ALTER TABLE b DISABLE TRIGGER ALL;
ALTER TABLE b ENABLE TRIGGER ALL;
COMMIT;
다음 가능성은 지연된 제약을 사용하는 것입니다. 이 이동 제약 검사는 시간을 커밋합니다. 따라서 INSERT
명령으로 질서를 존중해서는 안됩니다 .
ALTER TABLE b ALTER CONSTRAINT b_id_fkey DEFERRABLE;
BEGIN
postgres=
SET CONSTRAINTS
postgres=
INSERT 0 1
postgres=
INSERT 0 1
postgres=
ERROR: insert or update on table "b" violates foreign key constraint "b_id_fkey"
DETAIL: Key (id)=(100) is not present in table "a".
삽입 된 데이터를 확인하므로이 방법이 선호됩니다.
super user
고객이 복제 설정을 엉망으로 만들지 못하도록 역할 을 잠그는 aws aurora postgres에 있습니다. 일부 시스템 트리거를 비활성화하려면 슈퍼 유저 여야하는 것 같습니다. (현재 소유자이기도 한 내 관리자 계정을 사용하고 있습니다. 한 번 작동 한 이유를 잘 모르겠습니다.) 복제 옵션을 설정하는 것도super user
역할이 필요하기 때문에 실행 가능한 옵션이 아닙니다 . 내 유일한 옵션은 ... 삭제하고 외부 키를 다시 할 것 같다