2010-11-05 18 views
48

जब PostgreSQL में एक तालिका बनाने, डिफ़ॉल्ट बाधा नाम सौंपा जाएगा यदि उपलब्ध नहीं हो: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. यदि नहीं, तो असंगतताओं को रोकने के लिए डिफ़ॉल्ट नामों से पूरी तरह से बचा जाना चाहिए?

+2

मैं इसे एक नियम सिर्फ इस कारण के लिए डिफ़ॉल्ट नामों से बचने के लिए कर - आप स्थिति हर तैनाती में कमी अलग-अलग नाम है, जहां अंत –

उत्तर

18

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

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

 
ALTER TABLE example ADD UNIQUE (a, b); 
+4

आह! मैं गलती से 'कन्स्ट्रेंट' सहित 'अल्ट्रा टेबल उदाहरण' सहित कंसल्टेंट यूनिक (ए, बी); और त्रुटियों को प्राप्त कर रहा था। धन्यवाद! –

144

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

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

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

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

दृश्यों के लिए स्टैंडर्ड प्रत्यय

  • है सभी अनुक्रमों के लिए seq
  • अपने अद्वितीय-बाधा के

सबूत:

नोटिस: टेबल बनाएं/अद्वितीय तालिका "उदाहरण"

+8

। बहुत उपयोगी, धन्यवाद! मूल्य जोड़ने के लायक है कि विदेशी कुंजी प्रत्यय 'fkey' का उपयोग करती हैं और बहु-कॉलम विदेशी कुंजी बाधाओं में केवल पहला कॉलम नाम शामिल होता है। –

+1

@IanMackinnon, यह सबसे अच्छा जवाब होना चाहिए! –

+0

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

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