42710: duplicate_object
PostgreSQL의미
생성하려는 객체(역할, 타입, 제약 조건, 확장, 스키마, 인덱스 이름 등)가 이미 존재한다. PostgreSQL은 같은 이름/정의의 두 번째 객체를 허용하지 않는다.
원인
같은 이름의 객체가 이미 있는 상태에서 CREATE ROLE, CREATE TYPE, CREATE EXTENSION, ADD CONSTRAINT 같은 명령을 실행했다. 보통 스크립트를 두 번 실행했거나, 멱등하지 않은 마이그레이션, 또는 두 동시 세션이 같은 객체를 생성하려 한 것이 원인이다.
해결 방법
객체가 존재하는지 확인한다(역할은 pg_roles, 타입은 pg_type, 확장은 pg_extension). 마이그레이션을 멱등하게 작성한다: 가능한 경우 CREATE ... IF NOT EXISTS를 사용하거나 먼저 DROP ... IF EXISTS를 실행한다. 제약 조건 충돌이라면 기존 제약 조건의 이름을 바꾸거나 삭제 후 재생성한다.