| 롤 토토 : 문서 : 9.5 : 롤 토토 | |||
|---|---|---|---|
| PostgreSQL : 문서 : 9.5 : 논리 디코딩과 토토 사이트 추천 시스템 카탈로그 | PostgreSQL : 문서 : 9.5 : 와이즈 토토 디코딩 | 46장. 논리적 디코딩 | PostgreSQL : 문서 : 9.5 : 스포츠 토토 베트맨 디코딩 출력 작가 |
예제 출력 플러그인은 다음에서 찾을 수 있습니다.토토 캔 : 문서 : 9.5 : test_dePostgreSQL 소스 트리의 하위 디렉터리.
출력 플러그인은 출력 플러그인 이름을 라이브러리 기본 이름으로 사용하여 공유 라이브러리를 동적으로 로드하여 로드됩니다. 일반 라이브러리 검색 경로는 라이브러리를 찾는 데 사용됩니다. 필요한 출력 플러그인 콜백을 제공하고 라이브러리가 실제로 출력 플러그인임을 나타내려면 다음과 같은 함수를 제공해야 합니다._PG_output_plugin_init. 이 함수에는 개별 작업에 대한 콜백 함수 포인터로 채워져야 하는 구조체가 전달됩니다.
typedef 구조체 OutputPluginCallbacks
LogicalDecodeStartupCB 시작_cb;
LogicalDecodeBeginCB start_cb;
LogicalDecodeCha무지개 토토eCBcha무지개 토토e_cb;
LogicalDecodeCommitCB commit_cb;
LogicalDecodeFilterByOriginCB filter_by_origin_cb;
LogicalDecodeShutdownCB shutdown_cb;
OutputPluginCallbacks;
typedef void (*LogicalOutputPluginInit) (struct OutputPluginCallbacks *cb);
그begin_cb, cha무지개 토토e_cb그리고commit_cb콜백이 필요하지만startup_cb, filter_by_origin_cb그리고shutdown_cb선택사항입니다.
디코딩, 형식화 및 출력 변경을 위해 출력 플러그인은 출력 기능 호출을 포함하여 백엔드의 일반 인프라 대부분을 사용할 수 있습니다. 다음 중 하나에 의해 생성된 관계에만 액세스하는 한 관계에 대한 읽기 전용 액세스가 허용됩니다.initdb에서pg_catalog스키마 또는 다음을 사용하여 사용자 제공 카탈로그 테이블로 표시되었습니다.
ALTER TABLE user_catalog_table SET (user_catalog_table = true); CREATE TABLE another_catalog_table(데이터 텍스트) WITH (user_catalog_table = true);
거래 ID 할당으로 이어지는 모든 행위는 금지됩니다. 여기에는 테이블 쓰기, DDL 변경 수행, 호출 등이 포함됩니다.txid_current().
출력 플러그인 콜백은 거의 임의의 형식으로 소비자에게 데이터를 전달할 수 있습니다. SQL을 통해 변경 사항을 보는 것과 같은 일부 사용 사례에서는 임의의 데이터를 포함할 수 있는 데이터 유형으로 데이터를 반환합니다(예:바이테아)은 번거롭습니다. 출력 플러그인이 서버의 인코딩으로 텍스트 데이터만 출력하는 경우 다음 설정을 통해 선언할 수 있습니다.OutputPluginOptions.output_type에OUTPUT_PLUGIN_TEXTUAL_OUTPUT대신OUTPUT_PLUGIN_BINARY_OUTPUT에서시작 콜백. 이 경우 모든 데이터는 서버의 인코딩에 있어야 합니다.텍스트데이텀에 이를 포함할 수 있습니다. 이는 어설션 지원 빌드에서 확인됩니다.
출력 플러그인은 제공해야 하는 다양한 콜백을 통해 발생하는 변경 사항에 대한 알림을 받습니다.
동시 트랜잭션은 커밋 순서대로 디코딩되며, 특정 트랜잭션에 속한 변경 사항만 디코딩됩니다.시작그리고커밋콜백. 명시적으로 또는 암시적으로 롤백된 트랜잭션은 절대로 디코딩되지 않습니다. 성공적인 저장점은 해당 트랜잭션 내에서 실행된 순서대로 이를 포함하는 트랜잭션에 포함됩니다.
참고:이미 디스크에 안전하게 플러시된 트랜잭션만 디코딩됩니다. 이는 다음과 같은 상황으로 이어질 수 있습니다.커밋바로 다음에서 즉시 디코딩되지 않음pg_logical_slot_get_cha무지개 토토es()언제동기_커밋다음으로 설정됨꺼짐.
선택사항startup_cb복제 슬롯이 생성되거나 내보낼 준비가 된 변경 사항 수에 관계없이 변경 사항 스트리밍을 요청할 때마다 콜백이 호출됩니다.
typedef void (*LogicalDecodeStartupCB) (struct LogicalDecodi무지개 토토Context *ctx,
OutputPluginOptions *옵션,
부울 is_init);
그is_init복제 슬롯이 생성되는 동안 매개변수는 true이고 그렇지 않으면 false입니다.옵션출력 플러그인이 설정할 수 있는 옵션의 구조를 가리킵니다:
typedef 구조체 OutputPluginOptions
OutputPluginOutputType 출력_유형;
출력 플러그인 옵션;
출력_유형다음 중 하나로 설정되어야 합니다.OUTPUT_PLUGIN_TEXTUAL_OUTPUT또는OUTPUT_PLUGIN_BINARY_OUTPUT. 또한 참조하세요섹션 46.6.3.
시작 콜백은 다음에 있는 옵션을 검증해야 합니다.ctx-output_plugin_options. 출력 플러그인에 상태가 필요한 경우 다음을 사용할 수 있습니다.ctx-output_plugin_private저장합니다.
선택사항shutdown_cb콜백은 이전에 활성화된 복제 슬롯이 더 이상 사용되지 않을 때마다 호출되며 출력 플러그인에 비공개 리소스를 할당 해제하는 데 사용될 수 있습니다. 슬롯이 반드시 삭제되는 것은 아니며 스트리밍이 중지되는 것뿐입니다.
typedef void (*LogicalDecodeShutdownCB) (struct LogicalDecodi무지개 토토Context *ctx);
필수begin_cb콜백은 커밋된 트랜잭션의 시작이 디코딩될 때마다 호출됩니다. 중단된 트랜잭션과 해당 내용은 절대 디코딩되지 않습니다.
typedef void (*LogicalDecodeBeginCB) (struct LogicalDecodi무지개 토토Context *ctx,
ReorderBufferTXN *txn);
그txn매개변수에는 커밋된 타임스탬프 및 XID와 같은 트랜잭션에 대한 메타 정보가 포함됩니다.
필수commit_cb콜백은 트랜잭션 커밋이 디코딩될 때마다 호출됩니다.cha무지개 토토e_cb수정된 행이 있는 경우 모든 수정된 행에 대한 콜백이 이 전에 호출됩니다.
typedef void (*LogicalDecodeCommitCB) (struct LogicalDecodingContext *ctx,
ReorderBufferTXN *txn,
XLogRecPtr commit_lsn);필수cha무지개 토토e_cb콜백은 트랜잭션 내부의 모든 개별 행 수정에 대해 호출됩니다.삽입, 업데이트또는삭제. 원래 명령어가 한 번에 여러 행을 수정했더라도 콜백은 각 행에 대해 개별적으로 호출됩니다.
typedef void (*LogicalDecodeChangeCB) (struct LogicalDecodingContext *ctx,
ReorderBufferTXN *txn,
관계 관계,
ReorderBufferChange *변경);
그ctx그리고txn매개변수의 내용은 다음과 같습니다.begin_cb그리고commit_cb콜백, 추가로 관계 설명자관계행이 속한 관계와 구조체를 가리킴변경행 수정 설명이 전달되었습니다.
선택사항filter_by_origin_cb데이터가 재생되었는지 여부를 결정하기 위해 콜백이 호출됩니다.origin_id출력 플러그인에 관심이 있습니다.
typedef bool (*LogicalDecodeFilterByOriginCB) (struct LogicalDecodingContext *ctx,
RepOriginId Origin_id);
그ctx매개변수의 내용은 다른 콜백과 동일합니다. 정보는 없으나 원산지는 알 수 있습니다. 전달된 노드에서 발생한 변경 사항이 관련이 없다는 신호를 보내려면 true를 반환하여 해당 변경 사항이 필터링되도록 합니다. 그렇지 않으면 거짓입니다. 필터링된 트랜잭션 및 변경 사항에 대해서는 다른 콜백이 호출되지 않습니다.
이는 계단식 또는 다방향 복제 솔루션을 구현할 때 유용합니다. 원본을 기준으로 필터링하면 이러한 설정에서 동일한 변경 사항이 앞뒤로 복제되는 것을 방지할 수 있습니다. 트랜잭션과 변경 사항도 출처에 대한 정보를 전달하지만 이 콜백을 통한 필터링은 눈에 띄게 더 효율적입니다.
실제로 출력을 생성하기 위해 출력 플러그인은 다음에 데이터를 쓸 수 있습니다.문자열정보출력 버퍼 입력ctx-아웃내부에 있을 때begin_cb, commit_cb, 또는cha무지개 토토e_cb콜백. 출력 버퍼에 쓰기 전에,OutputPluginPrepareWrite(ctx, last_write)호출되어야 하며, 버퍼에 쓰기를 마친 후,OutputPluginWrite(ctx, last_write)20664_20710last_write특정 쓰기가 콜백의 마지막 쓰기인지 여부를 나타냅니다.
다음 예는 출력 플러그인 소비자에게 데이터를 출력하는 방법을 보여줍니다.
OutputPluginPrepareWrite(ctx, true); AppendStringInfo(ctx-out, "BEGIN %u", txn-xid); OutputPluginWrite(ctx, true);