मैं पोस्टग्रेज में कई प्राथमिक कुंजियों का उपयोग कैसे कर सकता हूं?
आप नहीं कर सकते। यह एक विरोधाभास है - एक प्राथमिक कुंजी की परिभाषा यह है कि है प्राथमिक कुंजी, एकवचन। आपके पास एक से अधिक नहीं हो सकते।
आपके पास कई 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
$
देखें कि यह पहली त्रुटि पर कैसे रुकता है?
(यह डिफ़ॉल्ट होगा, लेकिन यह पश्चगामी संगतता को तोड़ देगा)।