[postgresql] PostgreSQL에서 제약 이름 업데이트

Postgres에서 제약 이름을 변경할 수 있습니까? 다음과 함께 추가 된 PK가 있습니다.

ALTER TABLE contractor_contractor ADD CONSTRAINT commerce_contractor_pkey PRIMARY KEY(id);

나머지 시스템과 일관성을 유지하기 위해 다른 이름을 사용하고 싶습니다. 기존 PK 제약 조건을 삭제하고 새 제약 조건을 만들어야합니까? 아니면 그것을 관리하는 ‘부드러운’방법이 있습니까?

감사!



답변

기본 키의 경우 다음을 수행 할 수 있어야합니다.

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name

하지만 다른 유형의 제약 조건에서는 작동하지 않습니다. 가장 좋은 방법은 이전 것을 버리고 새 것을 만드는 것입니다. 트랜잭션 내에서 수행해야하므로 재 구축하는 동안 시스템이 없이는 작동하지 않습니다. (트랜잭션에서 할 수없는 경우 , 이전 항목을 삭제하기 전에 먼저 새 항목을 만들어야합니다. )


답변

PostgreSQL 9.2 이상에서 기존 제약 조건의 이름을 바꾸려면 ALTER TABLE을 사용할 수 있습니다 .

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;


답변

기본 키는 종종 기본 테이블 이름보다 뒤쳐진다는 것을 발견했습니다. 이 스크립트는 문제가있는 항목을 식별하고 수정하는 데 도움이되었습니다.

select
    table_name,
    constraint_name ,
    'ALTER TABLE ' || table_name || ' RENAME CONSTRAINT ' || constraint_name || ' TO ' || left(table_name, 58) || '_pkey;'
from information_schema.table_constraints tc
where constraint_type  = 'PRIMARY KEY'
and constraint_name <> left(table_name, 58) || '_pkey';

기본 키 이름이 더 이상 “기본”패턴 ( <tablename>_pkey) 이 아닌 모든 테이블을 찾고 각각에 대한 이름 바꾸기 스크립트를 만듭니다.

위 코드에서 58 자 제한은 제약 조건 이름의 최대 크기 (63 바이트)를 고려한 것입니다.

분명히 그것을 실행하기 전에 반환되는 것을 확인하십시오. 다른 사람들에게 도움이되기를 바랍니다.


답변