[postgresql] PostgreSQL : 기본 제약 이름

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. 그렇지 않은 경우 불일치를 방지하기 위해 기본 이름을 모두 피해야합니까?



답변

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

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

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


답변

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

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

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

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

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

  • seq 모든 시퀀스

UNIQUE 제약 증명 :

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


답변