तालिकाओं और / या अन्य वस्तुओं के बीच आंतरिक निर्भरता कभी भी वस्तु के नाम से बंधी नहीं होती है। आंतरिक रूप से, प्रत्येक वस्तु को एक कैटलॉग तालिका में संग्रहीत किया जाता है और वस्तु की OID (आंतरिक प्राथमिक कुंजी) का उपयोग सब कुछ के लिए किया जाता है। अन्य।
तदनुसार, एक FOREIGN KEY
संदर्भ कैटलॉग तालिकाओं में संग्रहीत किया जाता है pg_constraint
(बाधा स्वयं अपने नाम सहित) और pg_depend
. तालिका के नाम बदलने से कार्यक्षमता बिल्कुल भी खराब नहीं होगी ।
नाम प्रतिबंध अपरिवर्तित रहता है। आप इसे अनदेखा कर सकते हैं, या आप बाधा का नाम बदलना चाह सकते हैं ताकि यह भ्रामक न हो।
हालांकि, चूंकि आपने निर्माण के समय एक बाधा नाम निर्दिष्ट नहीं किया था, इसलिए सिस्टम ने एक डिफ़ॉल्ट चुना, जो कि example2_example1fk_fkey
है। आपके मामले में जब तक कि नाम नहीं लिया गया। संदर्भित तालिका का कोई संदर्भ नहीं नाम। लेकिन कॉलम नाम शायद आपके उदाहरण में भी बदलाव करना होगा। और वह बाधा नाम में प्रयोग किया जाता है।
ALTER TABLE example2 RENAME example1fk TO example3fk; -- rename column
Postgres 9.2 या बाद के संस्करण में आप केवल बाधा का नाम बदल सकते हैं (जैसे डेक्विस ने टिप्पणी की ):
ALTER TABLE example2 RENAME CONSTRAINT example2_example1fk_fkey TO example2_example3fk_fkey;
पुराने संस्करणों में, आपको इसका नाम बदलने के लिए बाधा को छोड़ना और फिर से बनाना होगा, एक ही कथन में सर्वश्रेष्ठ:
ALTER TABLE example2 -- rename constraint
DROP CONSTRAINT example2_example1fk_fkey
, ADD CONSTRAINT example2_example3fk_fkey FOREIGN KEY (example3fk)
REFERENCES example3 (id) DEFERRABLE INITIALLY DEFERRED;