TOAST 컬럼, replication slot, publication, 스키마 변경, 데이터 타입 매핑 등 Postgres 복제의 작동 방식과 관련된 많은 질문은 ClickPipes for Postgres FAQ에서 다룹니다. 해당 정보는 ClickHouse Managed Postgres 마이그레이션에도 적용됩니다.
복제 중 “enum의 입력 값이 잘못되었습니다” 오류가 표시됩니다
ALTER TYPE ... ADD VALUE 명령을 자동으로 전파하지 않으므로, 초기 스키마 설정 후 원본에 추가된 새 enum 값 때문에 대상에서 삽입이 실패합니다.
이 문제를 해결하려면 대상 Postgres의 enum 유형에 누락된 값을 추가하십시오:
your_enum_type을 enum 유형 이름으로, 'new_value'를 오류 메시지에 표시된 누락된 값으로 바꾸십시오.
복제 중 고유 제약 조건 또는 검사 제약 조건 위반 오류가 발생합니다
- 고유 제약 조건: 변경 사항은 프라이머리 키별 최신 값을 기록하는 일괄
MERGE/UPSERT작업으로 적용되므로, 특정 키의 작업 순서가 고유 인덱스에서 예상하는 순서와 일치하지 않을 수 있습니다. 이로 인해MERGE가 완료된 후에는 제약 조건이 충족되더라도 트랜잭션 내에서는 일시적으로UNIQUE제약 조건을 위반할 수 있습니다. Postgres는 외래 키처럼 고유 인덱스 검사를 지연할 수 없으므로, 검사를 트랜잭션 종료 시점까지 미룰 방법이 없습니다. 이는 데이터 일관성에 영향을 주지 않습니다. 행 아이덴티티는 프라이머리 키로 정의되며,MERGE로직도 동일한 프라이머리 키를 기준으로 하기 때문입니다. - 검사 제약 조건: 대상의 검사 제약 조건이 원본보다 더 엄격할 수 있으며, 일괄
MERGE중간 상태가 최종 상태에서는 제약 조건을 충족하더라도 일시적으로 이를 충족하지 못할 수 있습니다. 고유 제약 조건과 마찬가지로,MERGE는 행 아이덴티티를 정의하는 프라이머리 키를 기준으로 하므로 이는 데이터 일관성에 영향을 주지 않습니다.
복제 중 “cannot insert a non-DEFAULT value into column” 오류가 발생합니다
GENERATED ALWAYS AS IDENTITY로 정의되어 있을 때 발생합니다. 논리적 복제는 원본의 명시적 값을 전달하지만, GENERATED ALWAYS 컬럼은 DEFAULT 이외의 값을 허용하지 않으므로 삽입 작업이 다음과 같이 실패합니다:
GENERATED BY DEFAULT AS IDENTITY로 전환할 수 있습니다:
GENERATED BY DEFAULT AS IDENTITY(또는 serial/bigserial 컬럼)는 값이 지정되지 않으면 자동으로 값을 생성하며, GENERATED ALWAYS와 달리 원본에서 복제된 명시적 값도 허용합니다.
마이그레이션 중 “확장 기능을 사용할 수 없음” 오류가 표시됩니다
pg_dump) 중 원본 스키마가 대상 Managed Postgres에 설치되어 있지 않거나 지원되지 않는 Postgres 확장 기능에 종속된 경우 발생합니다. 다음 중 하나로 나타납니다:
your_extension을 바꾸십시오.
이 문제를 해결하려면 다음 중 하나를 수행하십시오.
- 수동 스키마 덤프 모드로 파이프를 재생성한 후, 지원되지 않는 확장 기능에 대한 종속성을 제거하거나 대체하도록 스키마를 조정하십시오.
- 대상 관리형 Postgres에서 해당 확장 기능을 활성화하도록 지원 티켓을 제출하십시오.