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 작업을 다시 시도하여 문제가 해결되었는지 확인합니다.
728x90

Postgresql 의 CDC 관리를 위해 Postgresql 설정 변경 하는 법 !

 

 

1. wal 상태 변경 (default : minimal)

Write-Ahead Logging (WAL) - Database의 변경 사항을 기록하는 로그
: 얼마나 많은 정보를 기록할지를 결정하는 설정입니다. 이 옵션은 데이터 복구, 복제, 또는 Change Data Capture(CDC) 등의 기능을 위해 중요한 역할을 합니다.

postgresql.conf

 

1. minimal

  • 설명: 최소한의 WAL 로그만 기록합니다. 주로 데이터베이스의 성능을 극대화하기 위한 용도로 사용됩니다.
  • 용도: 데이터베이스 복구만을 목표로 하고, **복제나 PITR(시점 복구)**를 사용하지 않을 경우에 적합합니다.
  • 제한사항: 이 설정은 복제(replication)나 **백업에서 시점 복구(PITR)**를 할 수 없습니다.

2. replica

  • 설명: WAL 로그에 데이터 복구와 복제(replication)를 위한 정보를 추가로 기록합니다.
  • 용도: 동기식 또는 비동기식 복제를 사용할 때 적합하며, 데이터베이스 복구와 **백업에서 시점 복구(PITR)**를 지원합니다.
  • 특징: 대부분의 기본적인 복제 시스템에서 사용되는 옵션입니다.

3. logical

  • 설명: replica에서 기록하는 정보에 더해, 논리적 복제와 **Change Data Capture (CDC)**에 필요한 추가 정보를 기록합니다.
  • 용도: 테이블 데이터의 변경 사항을 논리적 복제Kafka와 같은 스트리밍 시스템으로 전송하고 싶을 때 설정합니다. 주로 CDC 작업을 위해 사용됩니다.
  • 특징: 이 설정은 테이블의 구조 및 행 단위의 변경 사항을 추적할 수 있으며, 이를 통해 외부 시스템과의 연동이 가능합니다.

 

 

 

 

 

 

 

2. pgoutput 변경

postgresql.conf

 

PostgreSQL의 WAL을 기록하는 로그인데, WAL은 텍스트가 아닌 바이너리 형식으로 저장됨.

wal 데이터 중 일부.

하여 이 파일을 읽기 위해 다양한 디코더를 제공하는데, 이 디코더는 WAL 파일의 형식을 이해하고, 필요한 정보를 추출하여 논리적 형식으로 변환함. 

 

 

(1) pgoutput

  • 정의: pgoutput은 PostgreSQL의 논리적 복제에서 사용되는 기본 디코더입니다. 이 디코더는 WAL의 변경 사항을 논리적 데이터 변경 이벤트로 변환합니다.
  • 특징:
    • 논리적 복제: pgoutput은 기본적으로 PostgreSQL의 논리적 복제를 지원합니다. 이를 통해 사용자는 데이터를 복제하는 다른 서버에 데이터를 전송할 수 있습니다.
    • 변경 사항 표현: 데이터 변경(INSERT, UPDATE, DELETE) 시 각각의 변경 사항을 명확하게 식별하여 출력합니다.
    • 유연성: 여러 테이블과 필드를 포함한 복제 및 구독을 설정할 수 있어 유연한 데이터 복제 환경을 제공합니다.
  • 용도: 주로 Debezium과 같은 CDC(변경 데이터 캡처) 도구에서 사용하여 데이터베이스의 변경 사항을 Kafka와 같은 메시징 시스템으로 전송할 때 활용됩니다.

(2) decoderbufs

  • 정의: decoderbufs는 PostgreSQL의 논리적 복제에 사용되는 또 다른 디코더입니다. 이 디코더는 데이터를 보다 효율적으로 압축하여 처리할 수 있는 기능을 제공합니다.
  • 특징:
    • 압축된 형식: decoderbufs는 변경 사항을 보다 압축된 형식으로 출력하므로 데이터 전송량을 줄이고 성능을 향상시킬 수 있습니다.
    • 모든 변경 사항 기록: 이 디코더는 INSERT, UPDATE, DELETE를 포함하여 모든 데이터 변경 사항을 기록합니다.
    • 전문가용: decoderbufs는 주로 성능이 중요한 대규모 데이터베이스 환경에서 사용됩니다.
  • 용도: 고속 데이터 전송이 필요한 상황에서 사용되며, Debezium과 같은 CDC 도구와 함께 사용할 수 있습니다.

요약

  • pgoutput: PostgreSQL의 기본 디코더로, 논리적 복제를 지원하며 데이터 변경을 명확하게 출력.
  • decoderbufs: 압축된 형식으로 데이터를 전송하여 성능을 향상시키는 디코더로, 고속 데이터 전송이 필요한 경우에 적합.

 

 

 

 

3. Postgresql 재시작

 

 

 

- 변경사항 확인 

 

 

 

 

 

728x90

1. 첫번째 오류

https://yjshin.tistory.com/744

 

[Linux] Ubuntu root 권한이 없는 경우, is not in the sudoers file. This incident will be reported.

[username] is not in the sudoers file. This incident will be reported. 우분투에서 sudo 명령어 작성시 root 권한이 없을 때 발생하는 오류 문구 입니다. 해결 방법은 sudoers 파일에 계정 이름을 넣어 root 권한을 부여

yjshin.tistory.com

 

 

 

2. 두번째 오류

 

 

원인 파악을 위해 로그파일 확인!

 

 

 

 

pg_hba.conf 파일에 오류가 있음을 확인했다. 

 

 

위 파일에서 

#local   replication     all

 

 

이 부분 주석처리. 

 

 

+ Recent posts