Decoderbufsは、プロトコルバッファ形式の論理レプリケーション用のPostgreSQL論理デコーダ出力拡張機能です。
前提条件
Decoderbufsは、次のエンジンを実行するPolarDB for PostgreSQL (Compatible with Oracle) クラスターでサポートされています。
PolarDB for PostgreSQL (Oracle互換) 2.0 (バージョン2.0.14.1.0以降)
説明次のステートメントを実行して、PolarDB for PostgreSQL (Compatible with Oracle) クラスターのリビジョンバージョンを表示できます。
SHOW polar_version;Decoderbufsは、次のライブラリに依存します。
PostgreSQL 9.6以降
Protobuf-c: データのシリアル化の1.2以降
PostGIS: PostgreSQL Geo型をサポートする2.1以降。
設定と使用
Decoderbufsはデフォルトで自動的に読み込まれます。 wal_levelパラメーターをlogicalに変更する必要があります。
このパラメーターはコンソールで変更できます。 詳細については、「」「クラスターパラメーターの設定」をご参照ください。 パラメーターを変更すると、クラスターが再起動します。 作業は慎重に行ってください。
論理レプリケーションの例:
論理レプリケーションスロットを作成し、コーデックプラグインをdecoderbufsに設定します。
SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');公開されたテーブルを変更します。
decoderbufsデバッグモードを使用してWALログを表示します。
SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');decoderbufsを使用してWALの位置を更新し、WALの変更を取得します。
SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');論理レプリケータのWAL位置を確認します。
SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';
データ型マッピング
次の表は、現在のPostgreSQL型OIDがdecoderbufフィールドにマップされる方法を示しています。
PostgreSQLタイプOID | Decoderbufフィールド |
BOOLOID | datum_boolean |
INT2OID | datum_int32 |
INT4OID | datum_int32 |
INT8OID | datum_int64 |
OIDOID | datum_int64 |
FLOAT4OID | datum_float |
FLOAT8OID | datum_double |
NUMERICOID | datum_double |
CHAROID | datum_string |
VARCHAROID | datum_string |
BPCHAROID | datum_string |
TEXTOID | datum_string |
JSONOID | datum_string |
XMLOID | datum_string |
UUIDOID | datum_string |
TIMESTAMPOID | datum_string |
TIMESTAMPTZOID | datum_string |
BYTEAOID | datum_bytes |
POINTOID | datum_point |
PostGIS geometry | datum_point |
PostGIS geography | datum_point |
使用上の注意
Decoderbufsは、次のライブラリに依存します。
PostgreSQL 9.6以降
Protobuf-c: データのシリアル化の1.2以降
PostGIS: PostgreSQL Geo型をサポートする2.1以降。
設定と使用
Decoderbufsはデフォルトで自動的に読み込まれます。
論理レプリケーションは、postgresql.confファイルで設定できます。
# MODULES
shared_preload_libraries = 'decoderbufs'
# REPLICATION
wal_level = logical # minimal, archive, hot_standby, or logical (change requires restart)
max_wal_senders = 8 # max number of walsender processes (change requires restart)
wal_keep_segments = 4 # in logfile segments, 16MB each; 0 disables
#wal_sender_timeout = 60s # in milliseconds; 0 disables
max_replication_slots = 4 # max number of replication slots (change requires restart)論理レプリケーションの例:
論理レプリケーションスロットを作成し、コーデックプラグインをdecoderbufsに設定します。
SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');公開されたテーブルを変更します。
decoderbufsデバッグモードを使用してWALログを表示します。
SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');decoderbufsを使用してWALの位置を更新し、WALの変更を取得します。
SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');論理レプリケータのWAL位置を確認します。
SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';
データ型マッピング
次の表は、現在のPostgreSQL型OIDがdecoderbufフィールドにマップされる方法を示しています。
PostgreSQLタイプOID | Decoderbufフィールド |
BOOLOID | datum_boolean |
INT2OID | datum_int32 |
INT4OID | datum_int32 |
INT8OID | datum_int64 |
OIDOID | datum_int64 |
FLOAT4OID | datum_float |
FLOAT8OID | datum_double |
NUMERICOID | datum_double |
CHAROID | datum_string |
VARCHAROID | datum_string |
BPCHAROID | datum_string |
TEXTOID | datum_string |
JSONOID | datum_string |
XMLOID | datum_string |
UUIDOID | datum_string |
TIMESTAMPOID | datum_string |
TIMESTAMPTZOID | datum_string |
BYTEAOID | datum_bytes |
POINTOID | datum_point |
PostGIS geometry | datum_point |
PostGIS geography | datum_point |