다음 예제는 SQL 인터페이스를 사용하여 논리 디코딩 제어를 보여줍니다.
배트맨 토토 디코딩을 사용하기 전에 설정해야합니다Wal_leveltoLogical
andmax_replication_slots~ 1 개 이상. 그러면 대상 데이터베이스에 연결해야합니다 (아래 배트맨 토토에서배트맨 토토
) 슈퍼업자로서.
postgres =# - 출력 플러그인 'test_decoding'을 사용하여 'regression_slot'이라는 슬롯을 만듭니다. postgres =# select * from pg_create_logical_replication_slot ( 'regression_slot', 'test_decoding', false, true); slot_name | LSN ----------------+----------- 회귀 _slot | 0/16B1970 (1 줄) postgres =# select selt_name, 플러그인, slot_type, database, active, retart_lsn, pg_replication_slots에서 volucted_flush_lsn; slot_name | 플러그인 | slot_type | 데이터베이스 | 활성 | RETART_LSN | 확인 된_flush_lsn ----------------------------------------------------------------------------------------------------------------- 회귀 _slot | test_decoding | 논리적 | 배트맨 토토 | f | 0/16A4408 | 0/16A4440 (1 줄) 배트맨 토토 =# - 아직 볼 수있는 변경 사항이 없습니다 postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----+-----+------ (0 줄) postgres =# 테이블 데이터 생성 (ID 직렬 기본 키, 데이터 텍스트); 테이블을 만듭니다 배트맨 토토 =# - DDL은 복제되지 않았으므로 볼 수있는 것은 거래입니다. postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-------+------------- 0/ba2da58 | 10297 | 시작 10297 시작 0/ba5a5a0 | 10297 | 커밋 10297 (2 줄) 배트맨 토토 =# - 일단 변경되면 소비되고 방출되지 않습니다. 배트맨 토토 =# - 후속 호출에서 : postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----+-----+------ (0 줄) postgres =# 시작; postgres =*# 데이터에 삽입 (데이터) 값 ( '1'); postgres =*# 데이터에 삽입 (데이터) 값 ( '2'); 배트맨 토토 =*# 커밋; postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-------+---------------------------------------------------------------- 0/ba5a688 | 10298 | 10298을 시작하십시오 0/ba5a6f0 | 10298 | 테이블 public.data : 삽입 : id [정수] : 1 데이터 [텍스트] : '1' 0/ba5a7f8 | 10298 | table public.data : 삽입 : id [정수] : 2 데이터 [텍스트] : '2' 0/ba5a8a8 | 10298 | 커밋 10298 (4 줄) postgres =# 데이터에 삽입 (데이터) 값 ( '3'); 배트맨 토토 =# - 변경 스트림에서도 앞서 나갈 수 있습니다. postgres =# select * from pg_logical_slot_peek_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-------+---------------------------------------------------------------- 0/ba5a8e0 | 10299 | 시작 10299 시작 0/ba5a8e0 | 10299 | table public.data : 삽입 : ID [정수] : 3 데이터 [텍스트] : '3' 0/ba5a990 | 10299 | 10299 커밋 (3 줄) postgres =# - pg_logical_slot_peek_changes ()에 대한 다음 호출은 동일한 변경 사항을 다시 반환합니다. postgres =# select * from pg_logical_slot_peek_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-------+---------------------------------------------------------------- 0/ba5a8e0 | 10299 | 시작 10299 시작 0/ba5a8e0 | 10299 | table public.data : 삽입 : ID [정수] : 3 데이터 [텍스트] : '3' 0/ba5a990 | 10299 | 10299 커밋 (3 줄) 배트맨 토토 = #- 옵션을 출력 플러그인으로 전달하여 서식에 영향을 줄 수 있습니다. postgres =# select * from pg_logical_slot_peek_changes ( 'regression_slot', null, null, 'clude-timestamp', 'on'); LSN | xid | 데이터 -----------+-------+---------------------------------------------------------------- 0/ba5a8e0 | 10299 | 시작 10299 시작 0/ba5a8e0 | 10299 | table public.data : 삽입 : ID [정수] : 3 데이터 [텍스트] : '3' 0/ba5a990 | 10299 | Commit 10299 (2017-05-10 12 : 07 : 21.272494-04) (3 줄) 배트맨 토토 =# - 더 이상 소비를 멈출 필요가없는 슬롯을 파괴하는 것을 잊지 마십시오. 배트맨 토토 =# - 서버 리소스 : 배트맨 토토 =# 선택 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-- 슬롯 = 테스트 -시작 -F -컨트롤+Z$ psql -d 배트맨 토토 -c "데이터에 삽입 (데이터) 값 ( '4');" $ fg 693을 시작하십시오 table public.data : 삽입 : id [정수] : 4 데이터 [텍스트] : '4' 커밋 693컨트롤+C$ pg_recvlogical -d 배트맨 토토 --- 슬롯 = test -drop -slot Example 2: $ PG_RECVLOGICAL -D POSTGRES-SLOT = TEST-CREATE-SLOT--TWO-CHASE $ PG_RECVLOGICAL -D POSTGRES-- 슬롯 = 테스트 -시작 -F -컨트롤+Z$ psql -d 배트맨 토토 -c "시작; 데이터에 삽입 (데이터) 값 ( '5'); 트랜잭션 '테스트'준비;" $ fg 694 시작 table public.data : 삽입 : id [정수] : 5 데이터 [텍스트] : '5' 거래 '테스트'준비, TXID 694컨트롤+Z$ psql -d 배트맨 토토 -c "준비된 '테스트';" $ fg 준비된 '테스트', TXID 694 커밋컨트롤+C$ pg_recvlogical -d 배트맨 토토 --- 슬롯 = test -drop -slot
다음 예제는 준비된 트랜잭션을 해독하는 데 사용할 수있는 SQL 인터페이스를 보여줍니다. 2 단계 커밋 명령을 사용하기 전에 설정해야합니다max_prepared_transactions
~ 1 개 이상. 또한 슬롯을 사용하여 2 상 매개 변수를 'true'로 설정해야pg_create_logical_replication_slot
아직 디코딩되지 않은 경우 커밋 후 전체 트랜잭션을 스트리밍 할 것입니다.
postgres =# 시작; postgres =*# 데이터에 삽입 (데이터) 값 ( '5'); postgres =*# 거래 준비 'test_prepared1'; postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-----+-------------------------------------------------------------- 0/1689dc0 | 529 | 시작 529 시작 0/1689dc0 | 529 | table public.data : 삽입 : id [정수] : 3 데이터 [텍스트] : '5' 0/1689FC0 | 529 | 거래 'test_prepared1', txid 529 준비 (3 줄) postgres =# commit 준비 'test_prepared1'; postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-----+--------------------------------------------- 0/168a060 | 529 | 준비된 'test_prepared1', txid 529 커밋 (4 줄) 배트맨 토토 =#- 준비된 거래를 롤백 할 수도 있습니다 postgres =# 시작; postgres =*# 데이터에 삽입 (데이터) 값 ( '6'); postgres =*# 거래 준비 'test_prepared2'; postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-----+-------------------------------------------------------------- 0/168A180 | 530 | 시작 530을 시작하십시오 0/168a1e8 | 530 | table public.data : 삽입 : id [정수] : 4 데이터 [텍스트] : '6' 0/168a430 | 530 | 트랜잭션 'test_prepared2', txid 530을 준비하십시오 (3 줄) postgres =# 롤백 준비 'test_prepared2'; postgres =# select * from pg_logical_slot_get_changes ( 'regression_slot', null, null); LSN | xid | 데이터 -----------+-----+-------------------------------------------------- 0/168A4B8 | 530 | 롤백 준비 'test_prepared2', txid 530 (1 행)
18507_18733이 양식문서 문제를보고하려면