PostgreSQL에서 제약 이름 업데이트


89

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

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

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

감사!

답변:


82

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

ALTER INDEX commerce_contractor_pkey RENAME TO whatever_new_name

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


153

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

ALTER TABLE name RENAME CONSTRAINT constraint_name TO new_constraint_name;

1
@ArturoHerrero 한 번에 여러 제약 조건에서 이름을 바꿀 수 있습니까?
Erlan 2017 년

1
@Erlan 당신은 쿼리를 통해 모든 제약 목록을 얻고, pg_catalog그것을 통해 반복하고 LOOP, 동적 쿼리를 사용하여 이름을 바꿀 수 있습니다.
Evgeny Nozdrev 2011

1

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

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 바이트)를 고려한 것입니다.

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

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