PostgreSQL किसी भी कॉन्फ़िगरेशन विकल्प का समर्थन नहीं करता है, लेकिन एक और संभावना है।
postgres=# \d b
Table "public.b"
┌────────┬─────────┬───────────┐
│ Column │ Type │ Modifiers │
╞════════╪═════════╪═══════════╡
│ id │ integer │ │
└────────┴─────────┴───────────┘
Foreign-key constraints:
"b_id_fkey" FOREIGN KEY (id) REFERENCES a(id) DEFERRABLE
पोस्टग्रेज़ में रेफरेंसियल अखंडता ट्रिगर द्वारा कार्यान्वित की जाती है, और आप तालिका पर ट्रिगर्स को अक्षम कर सकते हैं। इस विधि के साथ आप कोई भी डेटा (जोखिम) अपलोड कर सकते हैं, लेकिन यह काफी तेज़ है - क्योंकि बड़े डेटा पर चेक महंगा है। और यदि आपका अपलोड सुरक्षित है, तो आप इसे कर सकते हैं।
BEGIN;
ALTER TABLE b DISABLE TRIGGER ALL;
-- now the RI over table b is disabled
ALTER TABLE b ENABLE TRIGGER ALL;
COMMIT;
अगला संभावना स्थगित बाधाओं का उपयोग कर रही है। समय की प्रतिबद्धता के लिए इस कदम की बाधा जांच। तो तुम INSERT
आदेशों के साथ आदेश का सम्मान करना नहीं होना चाहिए:
ALTER TABLE b ALTER CONSTRAINT b_id_fkey DEFERRABLE;
BEGIN
postgres=# SET CONSTRAINTS b_id_fkey DEFERRED;
SET CONSTRAINTS
postgres=# INSERT INTO b VALUES(100); -- this is not in a table
INSERT 0 1
postgres=# INSERT INTO b VALUES(10);
INSERT 0 1
postgres=# COMMIT;
ERROR: insert or update on table "b" violates foreign key constraint "b_id_fkey"
DETAIL: Key (id)=(100) is not present in table "a".
इस विधि आप के लिए प्राथमिकता दी जानी चाहिए क्योंकि डाला डेटा जाँच की जाएगी।
स्रोत
2016-06-30 04:08:40