이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 47.1. 논리적 디코딩 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

47.1. 논리적 디코딩 예#

다음 예는 SQL 인터페이스를 사용하여 논리적 디코딩을 제어하는 방법을 보여줍니다.

논리적 디코딩을 사용하기 전에 다음을 설정해야 합니다.wal_level논리적그리고max_replication_slots최소 1개. 그런 다음 대상 데이터베이스에 연결해야 합니다(아래 예에서는포스트그레) 슈퍼유저로.

postgres=# -- 출력 플러그인 'test_decoding'을 사용하여 'regression_slot'이라는 슬롯을 생성합니다.
postgres=# SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding', false, true);
    슬롯_이름 |    lsn
----+------------
 회귀_슬롯 | 0/016B1970
(1줄)

postgres=# pg_replication_slots에서 SELECT 슬롯 이름, 플러그인, 슬롯 유형, 데이터베이스, 활성, 재시작_lsn, 확인_플러시_lsn;
    슬롯_이름 |    플러그인 | 슬롯 유형 | 데이터베이스 | 활성 | 재시작_lsn | 확인_플러시_lsn
----+---------------+----------+----------+---------+------------+---------
 회귀_슬롯 | 테스트_디코딩 | 논리적 | 포스트그레스 | 에프 | 0/016A4408 | 0/016A4440
(1줄)

postgres=# -- 아직 확인할 변경사항이 없습니다.
postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
 lsn | 시드 | 데이터
------+------+------
(0행)

postgres=# CREATE TABLE 데이터(id 직렬 기본 키, 데이터 텍스트);
테이블 만들기

postgres=# -- DDL은 복제되지 않으므로 트랜잭션만 표시됩니다.
postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
    lsn |  시드 |     데이터
-----------+---------+--------------
 0/0BA2DA58 | 10297 | 10297 시작
 0/0BA5A5A0 | 10297 | 커밋 10297
(2열)

postgres=# -- 변경 사항을 읽고 나면 소비되고 내보내지지 않습니다.
postgres=# -- 후속 호출에서:
postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
 lsn | 시드 | 데이터
------+------+------
(0행)

postgres=# 시작;
postgres=*# INSERT INTO data(data) VALUES('1');
postgres=*# INSERT INTO data(data) VALUES('2');
postgres=*# 커밋;

postgres=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
    lsn |  시드 |                          데이터
------------+---------+-------------------------------
 0/0BA5A688 | 10298 | 10298 시작
 0/0BA5A6F0 | 10298 | 테이블 public.data: INSERT: ID[정수]:1 데이터[텍스트]:'1'
 0/0BA5A7F8 | 10298 | 테이블 public.data: INSERT: id[정수]:2 데이터[텍스트]:'2'
 0/0BA5A8A8 | 10298 | 커밋 10298
(4열)

postgres=# 데이터(데이터) VALUES('3')에 삽입;

postgres=# -- 변경 사항을 소비하지 않고도 변경 스트림을 미리 볼 수도 있습니다.
postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL);
    lsn |  시드 |                          데이터
------------+---------+-------------------------------
 0/0BA5A8E0 | 10299 | 10299 시작
 0/0BA5A8E0 | 10299 | 테이블 public.data: INSERT: id[정수]:3 데이터[텍스트]:'3'
 0/0BA5A990 | 10299 | 커밋 10299
(3열)

postgres=# -- 다음 pg_logical_slot_peek_changes() 호출은 동일한 변경 사항을 다시 반환합니다.
postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL);
    lsn |  시드 |                          데이터
------------+---------+-------------------------------
 0/0BA5A8E0 | 10299 | 10299 시작
 0/0BA5A8E0 | 10299 | 테이블 public.data: INSERT: id[정수]:3 데이터[텍스트]:'3'
 0/0BA5A990 | 10299 | 커밋 10299
(3열)

postgres=# -- 형식에 영향을 주기 위해 옵션을 출력 플러그인에 전달할 수 있습니다.
postgres=# SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL, 'include-timestamp', 'on');
    lsn |  시드 |                          데이터
------------+---------+-------------------------------
 0/0BA5A8E0 | 10299 | 10299 시작
 0/0BA5A8E0 | 10299 | 테이블 public.data: INSERT: id[정수]:3 데이터[텍스트]:'3'
 0/0BA5A990 | 10299 | 커밋 10299(2017-05-10 12:07:21.272494-04)
(3열)

postgres=# -- 더 이상 사용을 중지할 필요가 없는 슬롯을 파기하는 것을 기억하세요
postgres=# -- 서버 리소스:
postgres=# SELECT pg_drop_replication_slot('regression_slot');
 pg_drop_replication_slot
----------

(1행)

다음 예는 프로그램을 사용하여 스트리밍 복제 프로토콜을 통해 논리적 디코딩을 제어하는 방법을 보여줍니다.pg_recvlogical스포츠 토토 베트맨QL 배포판에 포함되어 있습니다. 이를 위해서는 복제 연결을 허용하도록 클라이언트 인증을 설정해야 합니다(참조섹션 26.2.5.1) 그리고 그거max_wal_senders추가 연결을 허용할 만큼 충분히 높게 설정되어 있습니다. 두 번째 예는 2단계 트랜잭션을 스트리밍하는 방법을 보여줍니다. 2단계 명령을 사용하기 전에 다음을 설정해야 합니다.max_prepared_transactions적어도 1개.

예 1:
$ pg_recvlogical -d postgres --slot=test --create-slot
$ pg_recvlogical -d postgres --slot=test --start -f -제어+Z$ psql -d 스포츠 토토 베트맨 -c "데이터(데이터) VALUES('4')에 삽입;"
$fg
시작 693
테이블 public.data: INSERT: id[정수]:4 데이터[텍스트]:'4'
커밋 693제어+C$ pg_recvlogical -d postgres --slot=test --drop-slot

예 2:
$ pg_recvlogical -d postgres --slot=test --create-slot --enable-two-phase
$ pg_recvlogical -d postgres --slot=test --start -f -제어+Z$ psql -d 스포츠 토토 베트맨 -c "BEGIN;데이터(데이터) VALUES('5')에 삽입; 트랜잭션 준비 '테스트';"
$fg
시작 694
테이블 public.data: INSERT: id[정수]:5 데이터[텍스트]:'5'
거래 준비 '테스트', txid 694제어+Z$ psql -d 스포츠 토토 베트맨 -c "COMMIT PREPARED '테스트';"
$fg
커밋 준비됨 '테스트', txid 694제어+C$ pg_recvlogical -d postgres --slot=test --drop-slot

다음 예는 준비된 트랜잭션을 디코딩하는 데 사용할 수 있는 SQL 인터페이스를 보여줍니다. 2단계 커밋 명령을 사용하기 전에 다음을 설정해야 합니다.max_prepared_transactions최소 1로 설정하십시오. 또한 다음을 사용하여 슬롯을 생성하는 동안 two-phase 매개변수를 'true'로 설정해야 합니다.pg_create_logical_replication_slot아직 디코딩되지 않은 경우 커밋 후 전체 트랜잭션을 스트리밍합니다.

스포츠 토토 베트맨=# 시작;
스포츠 토토 베트맨=*# INSERT INTO data(data) VALUES('5');
스포츠 토토 베트맨=*# 트랜잭션 준비 'test_prepared1';

스포츠 토토 베트맨=# SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
    lsn | 시드 |                          데이터
------------+------+-------------------------------
 0/01689DC0 | 529 | 시작 529
 0/01689DC0 | 529 | 테이블 public.data: INSERT: id[정수]:3 데이터[텍스트]:'5'
 0/01689FC0 | 529 | 트랜잭션 준비 'test_prepared1', txid 529
(3열)

스포츠 토토 베트맨=# COMMIT PREPARED 'test_prepared1';
스포츠 토토 베트맨=# pg_logical_slot_get_changes('regression_slot', NULL, NULL)에서 선택 *;
    lsn | 시드 |                    데이터
------------+------+-------------------------------
 0/0168A060 | 529 | 커밋 준비됨 'test_prepared1', txid 529
(4열)

스포츠 토토 베트맨=#-- 준비된 트랜잭션을 롤백할 수도 있습니다.
스포츠 토토 베트맨=# 시작;
스포츠 토토 베트맨=*# 데이터(데이터) VALUES('6')에 삽입;
스포츠 토토 베트맨=*# 트랜잭션 준비 'test_prepared2';
스포츠 토토 베트맨=# pg_logical_slot_get_changes('regression_slot', NULL, NULL)에서 선택 *;
    lsn | 시드 |                          데이터
------------+------+-------------------------------
 0/0168A180 | 530 | 시작 530
 0/0168A1E8 | 530 | 테이블 public.data: INSERT: id[정수]:4 데이터[텍스트]:'6'
 0/0168A430 | 530 | 트랜잭션 준비 'test_prepared2', txid 530
(3열)

스포츠 토토 베트맨=# 롤백 준비됨 'test_prepared2';
스포츠 토토 베트맨=# pg_logical_slot_get_changes('regression_slot', NULL, NULL)에서 선택 *;
    lsn | 시드 |                     데이터
------------+------+----------------------------------
 0/0168A4B8 | 530 | 롤백 준비됨 'test_prepared2', txid 530
(1행)