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
ます。そこでは、顧客がレプリケーション設定を台無しにできないように、ロールをロックダウンしています。一部のシステムトリガーを無効にするには、スーパーユーザーである必要があるようです。(現在、所有者でもある管理者アカウントを使用しています。なぜ一度機能したのかわかりません。)レプリケーションオプションの設定も、super user
ロールが必要なため、実行可能なオプションではありません。私の唯一のオプションは...外部キーをドロップして再作成しているようだ