2012-03-28 19 views
8

मेरे पास पोस्टग्रेस 9.1 में स्क्रिप्ट बनाने की सरल तालिका है। मुझे 2-विशेषताएँ पीके के साथ तालिका बनाने की आवश्यकता है, यदि यह अस्तित्व में नहीं है।केवल पोस्टग्रेएसक्यूएल तालिका में प्राथमिक कुंजी जोड़ें यदि यह मौजूद नहीं है

CREATE TABLE IF NOT EXISTS "mail_app_recipients" 
(
    "id_draft" Integer NOT NULL, 
    "id_person" Integer NOT NULL 
) WITH (OIDS=FALSE); -- this is OK 

ALTER TABLE "mail_app_recipients" ADD PRIMARY KEY IF NOT EXISTS ("id_draft","id_person"); 
-- this is problem since "IF NOT EXISTS" is not allowed. 

कोई समस्या इस समस्या को हल करने के लिए कैसे करें? अग्रिम में धन्यवाद।

उत्तर

8

क्यों CREATE TABLE अंदर पी परिभाषा में शामिल नहीं:

CREATE TABLE IF NOT EXISTS mail_app_recipients 
(
    id_draft Integer NOT NULL, 
    id_person Integer NOT NULL, 
    constraint pk_mail_app_recipients primary key (id_draft, id_person) 
) 
+0

धन्यवाद, यही वह है जिसे मैं ढूंढ रहा था। अलग-अलग प्राथमिक कुंजी अगर मौजूदा नहीं है तो असंभव है? –

+2

नहीं, 'वैकल्पिक तालिका' कथन के लिए 'अगर नहीं है' विकल्प नहीं है। –

7

आप निम्नलिखित की तरह कुछ कर सकता है, लेकिन यह तालिका बनाने में शामिल करने के रूप में a_horse_with_no_name पता चलता है बेहतर है।

if NOT exists (select constraint_name from information_schema.table_constraints where table_name = 'table_name' and constraint_type = 'PRIMARY KEY') then 

ALTER TABLE table_name 
    ADD PRIMARY KEY (id); 

end if;