728x90

PostgreSQL에서 replica identity는 Logical Replication 또는 Change Data Capture (CDC)를 사용할 때 중요합니다.

replica identity가 설정되지 않으면 DELETE 작업을 포함한 일부 작업이 실패하게 됩니다. 오류 메시지가 말하는 바는 다음과 같습니다.

원인

  • Replica Identity 미설정: 테이블이 복제 식별자가 설정되지 않았기 때문에, PostgreSQL은 DELETE 요청을 처리할 수 없습니다. PostgreSQL의 기본 설정은 replica identity가 없는 테이블에서 DELETE 작업을 지원하지 않으며, 이는 데이터 변경 사항이 소비자에게 올바르게 전달될 수 없도록 합니다.

해결 방법

cdc_table에 대한 replica identity를 설정하여 이 문제를 해결할 수 있습니다. PostgreSQL에서는 다음과 같은 방법으로 설정할 수 있습니다:

  1. REPLICA IDENTITY 설정: 다음 SQL 명령어를 사용하여 cdc_table의 replica identity를 설정합니다.
    • FULL: 전체 행의 데이터를 복제하는 설정입니다. 이 방법은 DELETE 요청을 포함한 모든 변경 사항을 처리할 수 있게 합니다.
    • USING INDEX <index_name>: 특정 인덱스를 사용하여 복제 식별자를 설정할 수도 있습니다. 이 경우 인덱스가 필요합니다.
  2.  
    코드 복사
    ALTER TABLE public.cdc_table REPLICA IDENTITY FULL;
  3. sql
  4. REPLICA IDENTITY 상태 확인: 테이블의 현재 replica identity 상태를 확인하려면 다음 쿼리를 사용할 수 있습니다.
    • relreplident의 값이 d인 경우 (d는 'default'를 의미) 설정이 되어 있지 않은 것입니다. f는 full 설정을, i는 인덱스 기반 복제를 의미합니다.
  5. sql
    코드 복사
    SELECT relname, relreplident FROM pg_class WHERE relname = 'cdc_table';
  6. 변경 사항 확인: REPLICA IDENTITY 설정 후, DELETE 작업을 다시 시도하여 문제가 해결되었는지 확인합니다.

+ Recent posts