2012-03-28 3 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. 

이 문제를 해결하는 방법은 무엇입니까? 미리 감사드립니다. 그러나 a_horse_with_no_name 알 수 있듯이 만들기 테이블에 포함하는 것이 좋습니다,

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) 
) 

답변

8

이유는 CREATE TABLE 내부의 PK 정의를 포함하지.

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; 
+0

감사합니다. 존재하지 않는다면 프라이 머리 키를 별도로 추가 할 수 없습니까? –

+2

아니요, 'ALTER TABLE' 문에 대해'IF NOT EXISTS' 옵션이 없습니다. –

7

당신은 다음과 같은 일을 할 수있는 :

관련 문제