decoderbufs是PostgreSQL逻辑解码器输出插件,用于以Protocol Buffers格式进行逻辑复制。

前提条件

支持的PolarDB PostgreSQL版的版本如下:
  • PostgreSQL 14(内核小版本14.5.1.0及以上)
  • PostgreSQL 11(内核小版本1.1.28及以上)
说明 您可通过如下语句查看PolarDB PostgreSQL版的内核小版本的版本号:
  • PostgreSQL 14
    select version();
  • PostgreSQL 11
    show polar_version;

前提条件

decoderbufs插件依赖以下库:
  • PostgreSQL:内核版本为9.6及以上版本。
  • Protobuf-c:1.2及以上版本,用于数据序列化。
  • PostGIS:2.1及以上版本,用于PostgreSQL空间地理类型的支持。

配置与使用

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)
逻辑复制示例如下:
  1. 创建逻辑复制槽,并设置编解码插件为decoderbufs。
    SELECT * FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');
  2. 逻辑复制发布方对发布的表进行修改。
  3. 使用decoderbufs调试模式查看WAL日志。
    SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');
  4. 使用decoderbufs获取WAL更改,用于更新WAL位置。
    SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1');
  5. 查看逻辑复制的WAL位置。
    SELECT * FROM pg_replication_slots WHERE slot_type = 'logical';

类型映射

PostgreSQL类型与decoderbuf字段的映射信息如下:
PostgreSQL类型Decoderbuf字段
BOOLOIDdatum_boolean
INT2OIDdatum_int32
INT4OIDdatum_int32
INT8OIDdatum_int64
OIDOIDdatum_int64
FLOAT4OIDdatum_float
FLOAT8OIDdatum_double
NUMERICOIDdatum_double
CHAROIDdatum_string
VARCHAROIDdatum_string
BPCHAROIDdatum_string
TEXTOIDdatum_string
JSONOIDdatum_string
XMLOIDdatum_string
UUIDOIDdatum_string
TIMESTAMPOIDdatum_string
TIMESTAMPTZOIDdatum_string
BYTEAOIDdatum_bytes
POINTOIDdatum_point
PostGIS geometrydatum_point
PostGIS geographydatum_point