PostgreSQL में प्राथमिक कुंजी के लिए मौजूदा सूचकांक को कैसे बढ़ावा दिया जाए


13

मुझे पता है कि एक टेबल के भीतर एक प्राथमिक कुंजी कैसे बनाई जाती है, लेकिन मैं किसी मौजूदा इंडेक्स को प्राथमिक कुंजी कैसे बना सकता हूं? मैं एक मौजूदा तालिका को एक डेटाबेस से दूसरे डेटाबेस में कॉपी करने की कोशिश कर रहा हूं। जब मैं तालिका दिखाता हूं, तो सबसे नीचे सूचकांक इस रूप में होता है:

"my_index" PRIMARY KEY, btree (column1, column2)

मैंने इसके साथ सूचकांक बनाया है:

CREATE INDEX my_index ON my_table (column1, column2)

लेकिन मुझे नहीं पता कि इसे प्राथमिक कुंजी कैसे बनाया जाए ...

अद्यतन: मेरे सर्वर का संस्करण 8.3.3 है


1
यदि my_index को प्राथमिक कुंजी के नाम के रूप में दिखाया गया है तो आपके पास पहले से ही एक सूचकांक है। Postgres में एक (यूनिक) इंडेक्स के बिना कोई PK नहीं है
a_horse_with_no_name

1
आपका PostgreSQL संस्करण क्या है?
filiprem

मैं at.३.३ चला रहा हूं
वाइल्डबिल

जवाबों:


16

प्राथमिक कुंजी बाधा जोड़ने के लिए आप ALTER TABLE का उपयोग करेंगे । Postgres में आप " ALTER TABLE .. ADD table_constraint_using_index" फॉर्म का उपयोग करके एक इंडेक्स को "प्रमोट" कर सकते हैं

ध्यान दें, प्राथमिक कुंजी के लिए सूचकांक को निश्चित रूप से अद्वितीय होना चाहिए

ALTER TABLE my_table 
    ADD CONSTRAINT PK_my_table PRIMARY KEY USING INDEX my_index;

वह मेरे काम नहीं आया। PK_my_table क्या है? मुझे लगता है कि यह एक लेबल है और मैं अपनी तालिका के नाम के लिए 'PK_' संलग्न करता हूं? मुझे "ERROR: सिंटैक्स त्रुटि" या "चरित्र" 83 पर "USING" के निकट सिंटैक्स त्रुटि
मिली

1
@ngramsky: USING INDEX9.1 के बाद से उपलब्ध है। इसलिए मुझे लगता है कि आप वर्तमान संस्करण नहीं चला रहे हैं
a_horse_with_no_name

नहीं, मैं 8.3.3 का उपयोग कर रहा हूं। मैं 8.3.3 में कैसे करूंगा?
वाइल्डबिल

5
उस प्राचीन संस्करण में ऐसा करने का एकमात्र तरीका सूचकांक को छोड़ना और एक नया पीके अवरोध जोड़ना है।
a_horse_with_no_name

2
@a_horse_with_no_name: आपको यह उत्तर देना चाहिए: आपकी टिप्पणी दूसरे उत्तर से पहले है ...
gbn

7

मुझे नहीं लगता कि पोस्टग्रेजिक के उस संस्करण में एक इंडेक्स को एक प्राथमिक कुंजी में बदलना संभव है।

मैं सिर्फ मौजूदा इंडेक्स को छोड़ दूंगा और आपके द्वारा निर्दिष्ट कॉलम का उपयोग करके प्राथमिक कुंजी बनाऊंगा।

DROP INDEX my_index;
ALTER TABLE ONLY my_table ADD CONSTRAINT pk_my_table PRIMARY KEY(column1,column2);

7.4 और 8.4 में काम किया


btw, "यदि केवल तालिका नाम से पहले निर्दिष्ट किया जाता है, तो केवल उस तालिका को बदल दिया जाता है। यदि केवल निर्दिष्ट नहीं है, तो तालिका और उसके सभी वंशज तालिकाएं (यदि कोई हो) बदल दी जाती हैं।"
पाओलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.