समस्या:
आप PostgreSQL में किसी तालिका में बाधाओं के डिफ़ॉल्ट नाम जानना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में, हम दो टेबल बनाते हैं, country और student , निम्नलिखित बाधाओं के साथ:PRIMARY KEY (स्तंभ id तालिकाओं में country और student ), FOREIGN KEY (स्तंभ country_id तालिका में student ), DEFAULT (स्तंभ name तालिका में student ), UNIQUE (स्तंभ name तालिका में country और कॉलम personal_number तालिका में student ), और CHECK (स्तंभ age तालिका में student )।
समाधान:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
आइए प्रदर्शित करें कि कैसे PostgreSQL डिफ़ॉल्ट रूप से इन तालिकाओं की बाधाओं को नाम देता है। उन्हें देखने के लिए इस क्वेरी का उपयोग करें:
SELECT conname, contype FROM pg_catalog.pg_constraint;
ये रहा परिणाम:
| नाम | प्रतिरूप |
|---|---|
| देश_पीकी | p |
| देश_नाम_की | यू |
| student_age_check | सी |
| student_pkey | p |
| student_personal_number_key | यू |
| student_country_id_fkey | f |
चर्चा:
जब हम अपनी तालिकाएँ बनाते हैं, तो हम कुछ स्तंभों के लिए बाधाएँ निर्धारित करते हैं। हालाँकि, हम इन बाधाओं के लिए नाम निर्दिष्ट नहीं करते हैं, इसलिए उन्हें PostgreSQL में डिफ़ॉल्ट रूप से नाम दिया गया है। बाधाओं के लिए डिफ़ॉल्ट नाम कैसे उत्पन्न होते हैं?
PostgreSQL में, डिफ़ॉल्ट बाधा प्रकार हैं p , f , u , और c ।
PRIMARY KEY तालिका नाम के साथ डिफ़ॉल्ट रूप से नामित किया गया है, एक अंडरस्कोर ('_ '), और 'pkey '। ऊपर हमारी परिणाम तालिका में, आप दो PRIMARY KEY देख सकते हैं नाम (टाइप करें 'p ’) – एक नाम से country_pkey country तालिका और दूसरा नाम student_pkey student टेबल।
एक FOREIGN KEY बाधा प्रकार 'f . द्वारा दर्शाया गया है '। इसका नाम वर्तमान तालिका के नाम से उत्पन्न होता है, एक अंडरस्कोर ('_ '), कॉलम का नाम, एक और अंडरस्कोर ('_ '), और 'fkey '। हमारे उदाहरण में, विदेशी कुंजी बाधा का नाम student_country_id_fkey है , क्योंकि कॉलम country_id तालिका में student एक विदेशी कुंजी है।
CHECK . के लिए डिफॉल्ट नाम बाधा एक विदेशी कुंजी के समान है, केवल यह कि यह बाधा प्रकार 'c' की है '। हमारे उदाहरण में, कॉलम age तालिका में student यह बाधा है, इसलिए डिफ़ॉल्ट बाधा नाम student_age_check . है ।
UNIQUE . के लिए डिफ़ॉल्ट नाम बाधा (टाइप करें 'u ') तालिका का नाम है, एक अंडरस्कोर ('_ '), कॉलम का नाम, दूसरा अंडरस्कोर ('_ '), और 'key '। हमारे उदाहरण में, तालिका student एक UNIQUE है student_personal_number_key . नाम की बाधा . एक बाधा में कई स्तंभों के लिए, नाम एक समान परंपरा का अनुसरण करता है लेकिन इसमें बाधा की परिभाषा में सभी स्तंभों के नाम शामिल होते हैं।