PostgreSQL में कई प्राथमिक कुंजी


13

मेरे पास निम्न तालिका है:

CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);

जब मैं निम्नलिखित आदेश का उपयोग करके इसे पुनर्स्थापित करने का प्रयास करता हूं:

psql -U postgres -h localhost -d word -f word.sql 

यह मुझे यह त्रुटि देता है:

तालिका "शब्द" के लिए कई प्राथमिक कुंजी की अनुमति नहीं है

मैं पोस्टग्रेज में कई प्राथमिक कुंजियों का उपयोग कैसे कर सकता हूं?

जवाबों:


26

मैं पोस्टग्रेज में कई प्राथमिक कुंजियों का उपयोग कैसे कर सकता हूं?

आप नहीं कर सकते। यह एक विरोधाभास है - एक प्राथमिक कुंजी की परिभाषा यह है कि है प्राथमिक कुंजी, एकवचन। आपके पास एक से अधिक नहीं हो सकते।

आपके पास कई uniqueअड़चनें हो सकती हैं । आपके पास एक प्राथमिक कुंजी हो सकती है जिसमें कई कॉलम होते हैं (एक समग्र प्राथमिक कुंजी)। लेकिन आपके पास एक मेज के लिए एक से अधिक प्राथमिक कुंजी नहीं हो सकती है।

हालाँकि, आपके द्वारा दिखाया गया कोड आपके द्वारा बताई गई त्रुटि उत्पन्न नहीं करता है:

$ psql -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__
CREATE TABLE
ALTER TABLE
ALTER TABLE
$

एक अनुमान के अनुसार आप वास्तव में इस तालिका को पहले ही परिभाषित कर चुके हैं और आप पिछली त्रुटियों को अनदेखा कर रहे हैं, फिर केवल पिछले को दिखा रहा है। यदि मैं इस कोड को फिर से चलाता हूं तो मुझे आउटपुट मिलता है:

ERROR:  relation "word" already exists
ALTER TABLE
ERROR:  multiple primary keys for table "word" are not allowed

यहाँ असली त्रुटि पहले वाली है, बिल्कुल।

मैं दृढ़ता से अनुशंसा हमेशा का उपयोग कर -v ON_ERROR_STOP=1में psql, उदाहरण के लिए:

$ psql -v ON_ERROR_STOP=1 -U postgres regress <<__END__
CREATE TABLE word(
word CHARACTER VARYING NOT NULL,
id BIGINT NOT NULL,
repeat INTEGER NOT NULL
);
ALTER TABLE public.word OWNER TO postgres;
ALTER TABLE ONLY  word ADD CONSTRAINT "ID_PKEY" PRIMARY KEY (word,id);
__END__

ERROR:  relation "word" already exists
$

देखें कि यह पहली त्रुटि पर कैसे रुकता है?

(यह डिफ़ॉल्ट होगा, लेकिन यह पश्चगामी संगतता को तोड़ देगा)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.