PostgreSQL : 기본 제약 이름


85

PostgreSQL에서 테이블을 생성 할 때 기본 제약 조건 이름이 제공되지 않으면 할당됩니다.

CREATE TABLE example (
    a integer,
    b integer,
    UNIQUE (a, b)
);

그러나 ALTER TABLE제약 조건을 추가하려면 이름이 필수 인 것 같습니다.

ALTER TABLE example ADD CONSTRAINT my_explicit_constraint_name UNIQUE (a, b);

이로 인해 내가 작업 한 프로젝트에서 이름 지정 불일치가 발생하고 다음과 같은 질문이 표시됩니다.

  1. 테이블 생성 중에 추가하면받은 이름으로 기존 테이블에 제약 조건을 추가하는 간단한 방법이 있습니까?

  2. 그렇지 않은 경우 불일치를 방지하기 위해 기본 이름을 모두 피해야합니까?


3
이런 이유로 기본 이름을 사용하지 않는 것이 규칙입니다. 모든 배포에서 제약 조건이 다른 이름을 갖는 상황이 발생합니다.
Paul Tomblin

답변:


35

설명서 ( "이것에 대해 매우 분명하다 tableconstraint : 테이블을 만들 때이 양식은 동일한 구문을 사용하여 테이블에 새로운 제약 조건을 추가합니다. ")

따라서 다음을 간단히 실행할 수 있습니다.

ALTER TABLE 예제 ADD UNIQUE (a, b);

5
아! 나는 실수로 CONSTRAINT좋아요를 포함 ALTER TABLE example ADD CONSTRAINT UNIQUE (a, b);하고 오류가 발생했습니다. 감사합니다!
Ian Mackinnon

275

PostgreSQL에서 인덱스의 표준 이름은 다음과 같습니다.

{tablename}_{columnname(s)}_{suffix}

여기서 접미사는 다음 중 하나입니다.

  • pkey 기본 키 제약 조건
  • key 고유 제약 조건
  • excl 제외 제약의 경우
  • idx 다른 종류의 인덱스
  • fkey 외래 키
  • check 검사 제약

시퀀스의 표준 접미사는 다음과 같습니다.

  • seq 모든 시퀀스

UNIQUE 제약 증명 :

주의 : CREATE TABLE / UNIQUE는 "example"테이블에 대한 암시 적 인덱스 "example_a_b_key"를 생성합니다.


10
매우 유용합니다, 감사합니다! 외래 키는 접미사를 사용하고 fkey다중 열 외래 키 제약 조건은 첫 번째 열 이름 만 포함하는 것 같습니다.
Ian Mackinnon

1
@IanMackinnon, 이것이 최고의 대답이어야합니다!
Marcio Mazzucato 2014

이 정보는 금입니다! 다음을 실행하여 확인할 수 있습니다.CREATE TABLE mytable (mycolumn numeric UNIQUE);
jmagnusson 2014-08-08

6
나는 "PostgreSQL의 인덱스 명명 규칙을"인터넷 검색을 할 때 찾고 정확히 대답
팬시 존

1
@someone ah 죄송합니다. E.4.3.3 유틸리티 명령의 끝을 의미 한 것 같습니다. E.4.3.4 데이터 유형 이전의 마지막 글 머리 기호 항목 : "외래 키에 대한 기본 제약 조건 이름을 선택할 때 모든 키 열의 이름 사용 (Peter Eisentraut)"
Michael Hewson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.