PostgreSQL의 여러 기본 키


13

다음 테이블이 있습니다.

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

다음 명령을 사용하여 복원하려고 할 때 :

psql -U postgres -h localhost -d word -f word.sql 

이 오류가 발생합니다.

"word"테이블에 여러 개의 기본 키를 사용할 수 없습니다

postgres에서 여러 기본 키를 어떻게 사용합니까?

답변:


26

postgres에서 여러 기본 키를 어떻게 사용할 수 있습니까?

당신은 할 수 없습니다. 그것은 oxymoron입니다-기본 키의 정의 기본 키, 단수라는 것입니다. 둘 이상 가질 수 없습니다.

여러 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=1psql예 :

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

첫 번째 오류에서 어떻게 중지되는지 봅니까?

(이것이 기본값이지만 이전 버전과의 호환성을 손상시킵니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.