2012-03-28 11 views
8

Ich habe einfache Tabelle erstellen Skript in Postgres 9.1. Ich brauche es, um die Tabelle mit 2-attributes PK nur zu erstellen, wenn es nicht existiert.Hinzufügen Primärschlüssel zu PostgreSQL-Tabelle nur, wenn es nicht existiert

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. 

Irgendeine Lösung, wie man dieses Problem löst? Danke im Voraus.

Antwort

8

Warum nicht die PK-Definition in der CREATE TABLE umfassen:

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

Danke, das ist, was ich gesucht habe. Separate ADD PRIMARY KEY wenn nicht vorhanden ist unmöglich? –

+2

Nein, für die Anweisung 'ALTER TABLE' gibt es keine Option 'IF NOT EXISTS'. –

7

Sie so etwas wie die folgenden tun könnte, aber es ist besser, es in der Tabelle erstellen enthalten, wie a_horse_with_no_name vermuten lässt.

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;