PostgreSQL: डिफ़ॉल्ट बाधा नाम


85

PostgreSQL में एक तालिका बनाते समय, डिफ़ॉल्ट बाधा नाम प्रदान नहीं किए जाने पर असाइन किया जाएगा:

CREATE TABLE example (
    a integer,
    b integer,
    UNIQUE (a, b)
);

लेकिन ALTER TABLEएक बाधा जोड़ने के लिए यह एक नाम अनिवार्य है लगता है:

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);

यह उन परियोजनाओं पर कुछ नामकरण विसंगतियों का कारण बना है, जिन पर मैंने काम किया है, और निम्नलिखित प्रश्नों का संकेत देता है:

  1. क्या तालिका निर्माण के दौरान जोड़े जाने वाले नाम के साथ एक अतिरिक्त तालिका में एक बाधा जोड़ने का एक सरल तरीका है?

  2. यदि नहीं, तो क्या विसंगतियों को रोकने के लिए डिफ़ॉल्ट नामों को पूरी तरह से टाला जाना चाहिए?


3
मैं इसे केवल इस कारण से डिफ़ॉल्ट नामों से बचने के लिए एक नियम बनाता हूं - आप उस स्थिति के साथ समाप्त होते हैं जहां हर तैनाती में बाधाओं के अलग-अलग नाम होते हैं।
पॉल टॉम्बलिन

जवाबों:


35

इस बारे में मैनुअल बहुत स्पष्ट है (" टेबलकॉन्स्ट्रैंट: यह फॉर्म क्रिएट टेबल के समान सिंटैक्स का उपयोग करके तालिका में एक नया अवरोध जोड़ता है। "

तो आप बस चला सकते हैं:

अन्य तालिका उदाहरण ADD UNIQUE (ए, बी);

5
आह! मुझे गलती से CONSTRAINTपसंद ALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);और गलतियाँ करना शामिल था। धन्यवाद!
इयान मैकिनॉन

275

PostgreSQL में अनुक्रमित के मानक नाम हैं:

{tablename}_{columnname(s)}_{suffix}

जहाँ प्रत्यय निम्नलिखित में से एक है:

  • pkey एक प्राथमिक कुंजी बाधा के लिए
  • key एक अद्वितीय बाधा के लिए
  • excl एक बहिष्करण बाधा के लिए
  • idx किसी अन्य प्रकार के सूचकांक के लिए
  • fkey एक विदेशी कुंजी के लिए
  • check एक चेक बाधा के लिए

दृश्यों के लिए मानक प्रत्यय है

  • seq सभी दृश्यों के लिए

आपके UNIQUE- बाधा का प्रमाण:

सूचना: टेबल / यूएनआईक्यूई सृजन तालिका के लिए निहित उदाहरण "example_a_b_key" बनाएगा "उदाहरण"


10
बहुत उपयोगी है, धन्यवाद! यह कहते हुए कि विदेशी कुंजियाँ प्रत्यय का उपयोग करती हैं fkeyऔर बहु-स्तंभ वाली विदेशी कुंजी बाधाएँ पहले स्तंभ नाम को शामिल करती हैं।
इयान मैकिनन

1
@IanMackinnon, यह सबसे अच्छा जवाब होना चाहिए!
मारीसो माज़ुकाटो

यह जानकारी सोना है! आप इनकी पुष्टि कर सकते हैं जैसेCREATE TABLE mytable (mycolumn numeric UNIQUE);
jmagnusson

6
सटीक जवाब मैं देख रहा था जब गुगली "पोस्टग्रैस्कल इंडेक्स नामकरण सम्मेलनों" के लिए
फैंसी जॉन

1
@someone आह क्षमा करें, मुझे लगता है कि मेरा मतलब है E.4.3.3 यूटिलिटी कमांड्स का अंत। यह E.4.3.4 से पहले अंतिम बुलेट आइटम है। डेटा प्रकार: "विदेशी कुंजी के लिए डिफ़ॉल्ट बाधा नाम का चयन करते समय सभी प्रमुख स्तंभों के नाम का उपयोग करें" (पीटर एसेनट्राट) "
माइकल हेवन्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.