कॉलम में बाधा जोड़ने के लिए इसे पहले तालिका में मौजूद होना चाहिए पोस्टग्रेस्क्ल में कोई कमांड नहीं है जिसका उपयोग आप कर सकते हैं जो कॉलम जोड़ देगा और एक ही समय में बाधा डाल देगा। यह दो अलग-अलग आदेश होना चाहिए। आप निम्न कमांड का प्रयोग यह कर सकते हैं:
पहले के रूप में कार्य करें:
ALTER TABLE links_chatpicmessage ADD COLUMN sender INTEGER;
मैं यहाँ प्रकार के रूप में integer
का उपयोग, लेकिन यह auth_user
तालिका के id
स्तंभ के एक ही प्रकार होना चाहिए।
तो फिर तुम बाधा जोड़ने
ALTER TABLE links_chatpicmessage
ADD CONSTRAINT fk_someName
FOREIGN KEY (sender)
REFERENCES auth_user(column_referenced_name);
इस आदेश की ADD CONSTRAINT fk_someName
हिस्सा अपने बाधा नामकरण इसलिए यदि आप अपने मॉडल बनाने के कुछ उपकरण के साथ यह दस्तावेज़ करने की आवश्यकता पर बाद आप एक नामित बाधा होगा एक यादृच्छिक नाम के बजाय।
यह प्रशासकों के उद्देश्यों के लिए भी कार्य करता है इसलिए एक डीबीए जानता है कि उस तालिका से बाधा है।
आमतौर पर हम इसे इस बात के बारे में कुछ संकेत देते हैं कि यह कहां से आया है, जहां यह आपके मामले पर संदर्भित होगा, यह fk_links_chatpicmessage_auth_user
होगा, इसलिए इस नाम को देखने वाले किसी भी व्यक्ति को यह पता चल जाएगा कि यह बाधा INFORMATION_SCHEMA पर जटिल क्वेरी के बिना क्या है ।
संपादित
@ btubbs के द्वारा उल्लेख किया है कि आप वास्तव में एक आदेश में एक बाधा के साथ एक स्तंभ जोड़ सकते हैं जवाब। इसलिए जैसा:
alter table links_chatpicmessage
add column sender integer,
add constraint fk_test
foreign key (sender)
references auth_user (id);
स्रोत
2016-02-27 22:24:08
हाय @HassanBaig मैं अपनी पोस्ट संपादित करेंगे प्रत्येक भाग की व्याख्या करने के
मैं इस वाक्य रचना का उपयोग करें। –
मैं देखता हूं। स्पष्टीकरण के लिए +1। मुझे इसे –
आज़माएं, इसलिए मैंने कोशिश की कि 'वैकल्पिक तालिका लिंक_चैटपिकमेजेज कंसस्ट्रेंट जोड़ें fk_links_chatpicmessage_auth_user विदेशी कुंजी (प्रेषक) संदर्भ auth_user (आईडी);' लेकिन मुझे अभी भी 'कुंजी कॉलम" संदर्भित है जो विदेशी कुंजी बाधा में संदर्भित नहीं है। मुझे लगता है कि मैं कुछ मौलिक याद कर रहा हूँ? –