2016-06-30 6 views
9

मैं पोस्टग्रेएसक्यूएल 9.4 में विदेशी कुंजी रखने वाले बहुत से माइग्रेशन बना रहा हूं।माइग्रेशन के लिए PostgreSQL विदेशी कुंजी चेक अक्षम करें

यह सिरदर्द पैदा कर रहा है क्योंकि टेबल को माइग्रेट किए जाने पर विदेशी कुंजी द्वारा अपेक्षित सटीक क्रम में होना चाहिए। अगर मुझे अन्य पैकेजों से माइग्रेशन चलाया जाता है तो यह भी चिपचिपा हो जाता है कि मेरे नए माइग्रेशन विदेशी कुंजी के लिए निर्भर करते हैं।

MySQL में, मैं बस माइग्रेशन फ़ाइल के शीर्ष पर SET FOREIGN_KEY_CHECKS = 0; जोड़कर इसे सरल बना सकता हूं। मैं केवल माइग्रेशन कोड की लंबाई के लिए PostgresSQL में अस्थायी रूप से ऐसा कैसे कर सकता हूं?

बीटीडब्ल्यू, इसके लिए लैरवेल स्कीमा बिल्डर का उपयोग कर।

उत्तर

18

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". 

इस विधि आप के लिए प्राथमिकता दी जानी चाहिए क्योंकि डाला डेटा जाँच की जाएगी।

संबंधित मुद्दे