예제 토토 사이트 순위 플러그인은에서 찾을 수 있습니다.PostgreSQL : 문서 : 17 :
PostgreSQL 소스 트리의 하위 디렉토리.
토토 사이트 순위 플러그인 이름을 라이브러리 기본 이름으로 공유 라이브러리를 동적으로로드하여 토토 사이트 순위 플러그인이로드됩니다. 일반 라이브러리 검색 경로는 라이브러리를 찾는 데 사용됩니다. 필요한 토토 사이트 순위 플러그인 콜백을 제공하고 라이브러리가 실제로 토토 사이트 순위 플러그인임을 나타내려면_pg_output_plugin_init
. 이 함수는 개별 동작에 대한 콜백 함수 포인터로 채워야하는 구조물이 전달됩니다.
TypEdef 구조물 토토 사이트 순위 플러그 incallbacks logicaldecodestartupcb startup_cb; logicaldecodebegincb begin_cb; logicaldecodechangecb change_cb; logicaldecodetruncatecb truncate_cb; logicaldecodecommitcb commit_cb; logicaldecodemessagecb message_cb; logicaldecodefilterbyorigincb filter_by_origin_cb; logicaldecodeshutdowncb shutdown_cb; logicaldecodefilterpreparecb filter_prepare_cb; logicaldecodebeginpreparecb begin_prepare_cb; logicaldecodepreparecb repay_cb; logicaldecodecommitpreparedcb commit_prepared_cb; logicaldecoderollbackpreparedcb rollback_prepared_cb; logicaldecodestreamstartcb stream_start_cb; logicaldecodestreamstopcb stream_stop_cb; logicaldecodestreamabortcb stream_abort_cb; logicaldecodestreampreecb stream_prepare_cb; logicaldecodestreamcommitcb stream_commit_cb; logicaldecodestreamchangecb stream_change_cb; logicaldecodestreammessagecb stream_message_cb; logicaldecodestreamtruncatecb stream_truncate_cb; outputplugincallbacks; typedef void ( *logicaloutputplugininit) (struct outputplugincallbacks *cb);
thebegin_cb
, Change_CB
andCommit_CB
콜백이 필요합니다.startup_cb
, Truncate_CB
, message_cb
, filter_by_origin_cb
및shutdown_cb
선택 사항입니다. 만약에Truncate_CB
설정되지 않았지만 aTruncate
해독되면 행동은 무시됩니다.
토토 사이트 순위 플러그인은 크고 진행되지 않은 대규모 트랜잭션의 스트리밍을 지원하기 위해 기능을 정의 할 수도 있습니다. 그만큼Stream_start_cb
, Stream_Stop_cb
, Stream_abort_cb
, Stream_commit_cb
및Stream_change_cb
반대,Stream_Message_CB
andStream_truncate_cb
선택 사항입니다. 그만큼Stream_prepare_cb
토토 사이트 순위 플러그인이 2 단계 커밋을 지원하는 경우에도 필요합니다.
토토 사이트 순위 플러그인은 또한 2 단계 커밋을 지원하기위한 함수를 정의 할 수 있으며, 이로 인해에서 동작을 해독 할 수 있습니다.거래 준비
. 그만큼begin_prepare_cb
, prepar_cb
, commit_prepared_cb
andRollback_prepared_cb
콜백이 필요합니다.filter_prepare_cb
선택 사항입니다. 그만큼Stream_prepare_cb
토토 사이트 순위 플러그인이 대규모 진행 중 트랜잭션의 스트리밍을 지원하는 경우에도 필요합니다.
DECODE, 형식 및 토토 사이트 순위 변경을 위해 토토 사이트 순위 플러그인은 호출 토토 사이트 순위 기능을 포함하여 대부분의 백엔드의 일반 인프라를 사용할 수 있습니다. 읽기 만으로만 관계에 대한 액세스만이 허용됩니다.initdb
inPG_CATALOG
스키마 또는 사용자가 제공하는 카탈로그 테이블로 표시되었습니다
ALTER TABLE USER_CATALOG_TABLE SET (user_catalog_table = true); (user_catalog_table = true)를 사용하여 다른 _catalog_table (data text); 테이블을 만듭니다.
토토 사이트 순위 플러그인의 사용자 카탈로그 테이블 또는 일반 시스템 카탈로그 테이블에 대한 액세스는를 통해 수행해야합니다.Systable_*
SCAN API 전용. 를 통해 액세스Heap_*
스캔 API가 오류가 발생합니다. 또한 거래 ID 할당으로 이어지는 모든 조치는 금지됩니다. 여기에는 테이블 작성, DDL 변경 수행 및 통화가 포함됩니다.PG_CURRENT_XACT_ID ()
.
토토 사이트 순위 플러그인 콜백은 거의 임의의 형식으로 소비자에게 데이터를 전달할 수 있습니다. SQL을 통한 변경 사항보기와 같은 일부 사용 사례의 경우 임의의 데이터를 포함 할 수있는 데이터 유형에서 데이터를 반환합니다 (예 :BYTEA
)는 번거 롭습니다. 토토 사이트 순위 플러그인이 서버 인코딩에서 텍스트 데이터 만 토토 사이트 순위하는 경우 설정하여를 선언 할 수 있습니다outputpluginoptions.output_type
tooutput_plugin_textual_output
대신output_plugin_binary_output
in시작 콜백. 이 경우 모든 데이터는 서버 인코딩에 있어야합니다.텍스트
Datum은 그것을 포함 할 수 있습니다. 이것은 Assertion 지원 빌드에서 확인됩니다.
토토 사이트 순위 플러그인은 제공 해야하는 다양한 콜백을 통해 발생하는 변경 사항에 대해 알림을받습니다.
동시 트랜잭션은 커밋 순서로 해독되며 특정 트랜잭션에 속하는 변경 사항 만시작
and커밋
콜백. 명시 적으로 또는 암시 적으로 롤백 된 거래는 디코딩되지 않습니다. 성공적인 저장 포인트는 해당 거래 내에서 실행 된 순서대로 포함 된 트랜잭션으로 접 힙니다. 2 단계 커밋을 위해 준비된 거래거래 준비
디코딩에 필요한 토토 사이트 순위 플러그인 콜백이 제공되면 디코딩됩니다. 디코딩되고있는 현재 준비된 거래가 A를 통해 동시에 중단 될 수 있습니다.롤백 준비
명령. 이 경우이 거래의 논리적 디코딩도 중단됩니다. 이러한 거래의 모든 변경 사항은 중단이 감지되고 일단을 건너 뜁니다.Prepare_CB
콜백이 호출됩니다. 따라서 동시 중단의 경우에도 토토 사이트 순위 플러그인에 충분한 정보가 제공되어 올바르게 처리 할 수 있습니다.롤백 준비
일단 해독되면.
디스크로 이미 안전하게 플러시 된 트랜잭션 만 디코딩됩니다. 그것은로 이어질 수 있습니다.커밋
직접 다음에 즉시 디코딩되지 않음pg_logical_slot_get_changes ()
언제synchronous_commit
로 설정되었습니다OFF
.
선택 사항startup_cb
콜백은 복제 슬롯이 생성되거나 스트림 변경을 요청할 때마다 호출됩니다.
typedef void ( *logicaldecodestartUpcb) (struct logicaldecodingcontext *ctx, outputpluginoptions *옵션, bool is_init);
theis_init
복제 슬롯이 생성되고 그렇지 않으면 거짓이 될 때 매개 변수가 사실이 될 것입니다.옵션
출력 플러그인이 설정할 수있는 옵션 구조를 가리 킵니다.
typedef struct outputpluginoptions outputpluginoutputtype output_type; bool leceing_rewrites; outputpluginoptions;
output_type
output_plugin_textual_output
또는output_plugin_binary_output
. 참조 참조섹션 47.6.3. 만약에수신 _rewrites
True, 토토 사이트 순위 플러그인은 특정 DDL 작업 중에 힙 재 작성에 의한 변경 사항도 호출됩니다. DDL 복제를 처리하는 플러그인에 관심이 있지만 특수 처리가 필요합니다.
시작 콜백은에 존재하는 옵션을 검증해야합니다.ctx- output_plugin_options
. 토토 사이트 순위 플러그인에 상태가 있어야하는 경우 사용할 수 있습니다ctx- output_plugin_private
저장하려면
선택 사항shutdown_cb
콜백은 이전에 활성 복제 슬롯이 더 이상 사용되지 않을 때마다 호출되며 토토 사이트 순위 플러그인에 리소스를 개인화하는 데 사용할 수 있습니다. 슬롯이 반드시 떨어지지 않아도되며 스트리밍이 중지됩니다.
typedef void ( *logicaldecodeshutdowncb) (struct logicaldecodingcontext *ctx);
필수begin_cb
커밋 된 트랜잭션의 시작이 해독 될 때마다 콜백이 호출됩니다. 중단 된 거래와 해당 내용은 디코딩되지 않습니다.
typedef void ( *logicaldecodebegincb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN);
theTXN
매개 변수는 거래에 대한 메타 정보가 포함되어 있습니다.
필수Commit_CB
트랜잭션 커밋이 해독 될 때마다 콜백이 호출됩니다. 그만큼Change_CB
수정 된 행이있는 경우 모든 수정 된 행에 대한 콜백이 호출되었습니다.
typedef void ( *logicaldecodecommitcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr commit_lsn);
필수Change_CB
거래 내의 모든 개별 행 수정에 대해 콜백이 호출됩니다.삽입
, 업데이트
또는삭제
. 원래 명령이 한 번에 여러 행을 수정하더라도 콜백은 각 행에 대해 개별적으로 호출됩니다. 그만큼Change_CB
콜백은 시스템 또는 사용자 카탈로그 테이블에 액세스하여 행 수정 세부 사항을 출력하는 프로세스를 지원할 수 있습니다. 준비된 (그러나 아직 커밋되지 않은) 트랜잭션을 디코딩하거나 커밋되지 않은 트랜잭션의 디코딩의 경우이 변경 콜백은이 동일한 트랜잭션의 동시 롤백으로 인해 오류가 발생할 수 있습니다. 이 경우,이 중단 된 거래의 논리적 디코딩은 우아하게 중지됩니다.
typedef void ( *logicaldecodechangecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, 관계 관계, REARDERBUFFERCHANGE *Change);
theCTX
andTXN
매개 변수는와 동일한 내용을 갖습니다.begin_cb
및Commit_CB
콜백, 그러나 또한 관계 설명 자관계
행이 속한 관계를 가리키고 구조물변경
행 수정을 설명하는 것이 전달됩니다.
선택 사항Truncate_CB
콜백이 호출되었습니다Truncate
명령.
typedef void ( *logicaldecodetruncatecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, int nrelations, 관계 관계 [], REARDERBUFFERCHANGE *Change);
매개 변수는와 유사합니다.Change_CB
콜백. 그러나 왜냐하면Truncate
외국 키로 연결된 테이블에 대한 조치를 함께 실행해야합니다.이 콜백은 단 하나의 관계 대신 일련의 관계를받습니다. 의 설명을 참조하십시오.Truncate자세한 내용은 진술.
선택 사항filter_by_origin_cb
콜백이 호출되어origin_id
토토 사이트 순위 플러그인에 관심이 있습니다.
typedef bool ( *logicaldecodefilterbyorigincb) (struct logicaldecodingcontext *ctx, reporiginid origin_id);
theCTX
매개 변수는 다른 콜백과 동일한 내용을 갖습니다. 정보는 없지만 원점을 사용할 수 있습니다. 노드에서 전달 된 변화가 관련이 없다는 것을 알리기 위해, true를 반환하여 필터링됩니다. 그렇지 않으면 거짓. 다른 콜백은 필터링 된 트랜잭션 및 변경에 대해 요구되지 않습니다.
이것은 계단식 또는 다 방향 복제 솔루션을 구현할 때 유용합니다. 원점에 의한 필터링을 사용하면 그러한 설정에서 동일한 변경 사항을 앞뒤로 복제하는 것을 방지 할 수 있습니다. 트랜잭션 및 변경 사항도 원점에 대한 정보를 제공하지만이 콜백을 통한 필터링은 더욱 효율적입니다.
선택 사항message_cb
논리적 디코딩 메시지가 디코딩 될 때마다 콜백이 호출됩니다.
typedef void ( *logicaldecodemessagecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr message_lsn, bool transactional, const char *prefix, size message_size, const char *메시지);
theTXN
매개 변수에는 거래에 대한 메타 정보가 포함되어 있습니다. 그러나 메시지가 비 트랜잭션이고 메시지를 기록한 트랜잭션에 아직 XID가 할당되지 않았을 때 NULL이 될 수 있습니다. 그만큼LSN
메시지의 WAL 위치가 있습니다. 그만큼거래
메시지가 트랜잭션으로 전송되었는지 여부를 말합니다. 변경 콜백과 마찬가지로, 준비된 (그러나 아직 커밋되지 않은) 트랜잭션을 디코딩하거나 커밋되지 않은 트랜잭션의 디코딩을하는 경우이 메시지 콜백은이 동일한 트랜잭션의 동시 롤백으로 인해 오류가 발생할 수 있습니다. 이 경우,이 중단 된 거래의 논리적 디코딩은 우아하게 중지됩니다. 그만큼접두사
현재 플러그인에 대한 흥미로운 메시지를 식별하는 데 사용할 수있는 임의의 null 종결 접두사입니다. 그리고 마지막으로메시지
매개 변수는 실제 메시지를 보유합니다message_size
크기.
출력 플러그인이 흥미로운 것으로 간주하는 접두사가 독특하다는 것을 확인하기 위해 추가주의를 기울여야합니다. 확장자 이름 또는 출력 플러그인 자체를 사용하는 것은 종종 좋은 선택입니다.
선택 사항filter_prepare_cb
콜백은 현재 2 단계 커밋 트랜잭션의 일부인 데이터 가이 준비 단계에서 디코딩을 위해 고려되어야하는지 여부를 결정하기 위해 호출됩니다.준비
시간. 디코딩을 건너 뛰어야한다는 신호를 보내려면 returntrue
;거짓
그렇지 않으면. 콜백이 정의되지 않으면거짓
가 가정됩니다 (즉, 필터링 없음, 2 단계 커밋을 사용한 모든 트랜잭션도 두 단계로 해독됩니다)..
typedef bool ( *logicaldecodefilterprepparecb) (struct logicaldecodingcontext *ctx, TransactionId XID, const char *gid);
theCTX
매개 변수는 다른 콜백과 동일한 내용을 가지고 있습니다. 매개 변수xid
andgid
거래를 식별하는 두 가지 다른 방법을 제공합니다. 나중에준비
또는롤백 준비
토토 사이트 순위 플러그인을 사용하여 사용할 내용의 선택을 제공합니다.
콜백은 트랜잭션 당 여러 번 디코딩하여 디코딩하여 주어진 쌍에 대해 동일한 정적 답변을 제공해야합니다xid
및gid
전화 할 때마다.
필수begin_prepare_cb
준비된 트랜잭션의 시작이 해독 될 때마다 콜백이 호출됩니다. 그만큼gid
필드,TXN
매개 변수,이 콜백에서 플러그인이 이미 수신되었는지 확인하기 위해이 콜백에서 사용할 수 있습니다준비
이 경우 트랜잭션의 나머지 변경 사항을 오류가 발생하거나 건너 뛸 수 있습니다.
typedef void ( *logicaldecodebeginprecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN);
필수Prepare_CB
콜백은 2 단계 커밋을 위해 준비된 트랜잭션이 해독 될 때마다 호출됩니다. 그만큼Change_CB
수정 된 행이 있으면 모든 수정 된 행의 콜백이 호출되었습니다. 그만큼gid
필드,이 필드TXN
매개 변수,이 콜백에서 사용할 수 있습니다.
typedef void ( *logicaldecodepreparecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr repay_lsn);
필수commit_prepared_cb
거래 할 때마다 콜백이 호출됩니다준비 준비
디코딩되었습니다. 그만큼gid
필드,TXN
매개 변수,이 콜백에서 사용할 수 있습니다.
typedef void ( *logicaldecodecommitpreparedcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr commit_lsn);
필수Rollback_prepared_cb
거래 할 때마다 콜백이 호출됩니다롤백 준비
디코딩되었습니다. 그만큼gid
필드,TXN
매개 변수는이 콜백에서 사용할 수 있습니다. 매개 변수repay_end_lsn
andPrepare_time
플러그인이이를 수신했는지 확인하는 데 사용할 수 있습니다거래 준비
이 경우 롤백을 적용 할 수 있습니다. 그렇지 않으면 롤백 작동을 건너 뛸 수 있습니다. 그만큼gid
다운 스트림 노드가 동일한 식별자와 준비된 트랜잭션을 가질 수 있기 때문에 충분하지 않습니다.
typedef void ( *logicaldecoderollbackpreparedcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr repay_end_lsn, timestamptz repay_time);
필수Stream_start_cb
진행중인 트랜잭션에서 스트리밍 된 변경 블록을 열 때 콜백이 호출됩니다.
typedef void ( *logicalDecodeStreamStartCB) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN);
필수Stream_Stop_CB
진행중인 트랜잭션에서 스트리밍 된 변경 블록을 닫을 때 콜백이 호출됩니다.
typedef void ( *logicalDecodeStreamStopcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN);
필수Stream_abort_cb
콜백은 이전에 스트리밍 된 트랜잭션을 중단하기 위해 호출됩니다.
typedef void ( *logicaldecodestreamabortcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr abort_lsn);
theStream_prepare_cb
콜백은 2 단계 커밋의 일환으로 이전에 스트리밍 된 트랜잭션을 준비하기 위해 호출됩니다. 이 콜백은 출력 플러그인이 대규모 진행 중 트랜잭션의 스트리밍과 2 단계 커밋을 모두 지원할 때 필요합니다.
typedef void ( *logicalDecodeStreamPreparecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr repay_lsn);
필수Stream_commit_cb
콜백은 이전에 스트리밍 된 트랜잭션을 커밋하기 위해 호출됩니다.
typedef void ( *logicalDecodeStreamCommitcb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr commit_lsn);
필수Stream_change_cb
스트리밍 된 변경 블록에서 변경을 보낼 때 콜백이 호출됩니다 (Stream_start_cb
andStream_Stop_CB
전화). 트랜잭션이 나중에 중단 될 수 있으므로 실제 변경 사항은 표시되지 않으며 중단 된 거래의 변경 사항을 해독하지 않습니다.
typedef void ( *logicaldecodestreamchangecb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, 관계 관계, REARDERBUFFERCHANGE *Change);
선택 사항Stream_Message_CB
스트리밍 된 변경 블록에서 일반 메시지를 보낼 때 콜백이 호출됩니다 (Stream_start_cb
및Stream_Stop_cb
전화). 트랜잭션이 나중에 중단 될 수 있으므로 트랜잭션 메시지의 메시지 내용은 표시되지 않으며 중단 된 트랜잭션의 변경 사항을 해독하지 않습니다.
typedef void ( *logicalDecodeStreamMessageCB) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, xlogrecptr message_lsn, bool transactional, const char *prefix, size message_size, const char *메시지);
선택 사항Stream_truncate_cb
콜백이 호출되었습니다Truncate
스트리밍 된 변경 블록의 명령 (Stream_start_cb
및Stream_Stop_CB
전화).
typedef void ( *logicalDecodeStreamTruncateCb) (struct logicaldecodingcontext *ctx, REARDERBUFFERTXN *TXN, int nrelations, 관계 관계 [], REARDERBUFFERCHANGE *Change);
매개 변수는와 유사합니다.Stream_change_cb
콜백. 그러나 왜냐하면Truncate
외국 키로 연결된 테이블의 조치를 함께 실행해야합니다.이 콜백은 단 하나의 관계 대신 일련의 관계를받습니다. 의 설명을 참조하십시오.Truncate자세한 내용은 진술.
실제로 토토 사이트 순위을 생성하려면 토토 사이트 순위 플러그인이 데이터에 데이터를 쓸 수 있습니다StringInfo
토토 사이트 순위 버퍼에서ctx- out
내부에있을 때begin_cb
, Commit_CB
또는Change_CB
콜백. 토토 사이트 순위 버퍼에 쓰기 전에outputpluginpreparewrite (ctx, last_write)
호출해야하고 버퍼에 쓰기를 마친 후outputpluginWrite (CTX, last_write)
쓰기를 수행하려면 호출되어야합니다. 그만큼last_write
특정 쓰기가 콜백의 마지막 쓰기인지 여부를 나타냅니다.
다음 예제는 토토 사이트 순위 플러그인의 소비자에게 데이터를 토토 사이트 순위하는 방법을 보여줍니다.
outputpluginpreparewrite (ctx, true); AppendStringInfo (ctx- out, "시작 %u", txn- xid); OutputPlugInwrite (CTX, True);
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면