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भूमिका की आवश्यकता होती है । मेरा एकमात्र विकल्प विदेशी कुंजियों को गिराना और पुनः बनाना प्रतीत होता है ...