2012-03-28 16 views
8

私はPostgreSQL 9.1で簡単なテーブル作成スクリプトを用意しています。 2属性PKが存在しない場合にのみテーブルを作成する必要があります。PostgreSQLテーブルにプライマリキーを追加する(存在しない場合のみ)

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. 

この問題を解決する方法はありますか?前もって感謝します。なぜ、CREATE TABLE内のPKの定義が含まれていませ

答えて

8

:あなたは、次のような何かを行うことができ

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

いいえ、 'ALTER TABLE'文に' IF NOT EXISTS'オプションはありません。 –

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; 
関連する問題