PostgreSQL herhangi bir yapılandırma seçeneğini desteklemez, ancak başka bir olasılık daha vardır.
postgres=
Table "public.b"
┌────────┬─────────┬───────────┐
│ Column │ Type │ Modifiers │
╞════════╪═════════╪═══════════╡
│ id │ integer │ │
└────────┴─────────┴───────────┘
Foreign-key constraints:
"b_id_fkey" FOREIGN KEY (id) REFERENCES a(id) DEFERRABLE
Postgres'teki bilgi bütünlüğü, tetikleyiciler tarafından uygulanır ve tablodaki tetikleyicileri devre dışı bırakabilirsiniz. Bu yöntemle herhangi bir veriyi (riski) yükleyebilirsiniz, ancak bu önemli ölçüde daha hızlıdır - çünkü büyük verilerin kontrolü pahalıdır. Ve yüklemeniz güvenliyse, yapabilirsiniz.
BEGIN;
ALTER TABLE b DISABLE TRIGGER ALL;
ALTER TABLE b ENABLE TRIGGER ALL;
COMMIT;
Bir sonraki olasılık, ertelenmiş kısıtlamaları kullanmaktır. Bu hareket kısıtlama kontrolü, zamanı işlemek için. Bu nedenle, INSERTkomutlarla düzene saygı göstermemelisiniz :
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".
Girilen veriler kontrol edileceği için bu yöntem sizin için tercih edilmelidir.
super userrolü kilitlediler, böylece müşteriler çoğaltma ayarlarını bozamaz. Bazı sistem tetikleyicilerini devre dışı bırakmak için süper bir kullanıcı olmam gerekiyor gibi görünüyor. (Şu anda aynı zamanda sahibi olan yönetici hesabımı kullanıyorum - neden bir kez çalıştığından emin değilim.) Çoğaltma seçeneğini ayarlamak da uygun bir seçenek değildir, çünkü bu dasuper userrolü gerektirir . Tek seçeneğim yabancı anahtarları düşürmek ve yeniden oluşturmak gibi görünüyor ...