decoderbufs

将WAL逻辑解码为ProtocolBuffer协议的消息

概览

扩展包名版本分类许可证语言
decoderbufs3.6.0ETLMITC
ID扩展名BinLibLoadCreateTrustReloc模式
9650decoderbufs-
相关扩展pglogical wal2json decoder_raw test_decoding kafka_fdw pglogical_origin pglogical_ticker pg_failover_slots

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG3.6.01817161514decoderbufs-
RPMPGDG3.5.01817161514postgres-decoderbufs_$v-
DEBPGDG3.6.01817161514postgresql-$v-decoderbufs-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64
u26.x86_64
u26.aarch64

安装

您可以直接安装 decoderbufs 扩展包的预置二进制包,首先确保 PGDG 仓库已经添加并启用:

pig repo add pgdg -u          # 添加 PGDG 仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install decoderbufs;          # 当前活跃 PG 版本安装
pig ext install -y decoderbufs -v 18  # PG 18
pig ext install -y decoderbufs -v 17  # PG 17
pig ext install -y decoderbufs -v 16  # PG 16
pig ext install -y decoderbufs -v 15  # PG 15
pig ext install -y decoderbufs -v 14  # PG 14
dnf install -y postgres-decoderbufs_18       # PG 18
dnf install -y postgres-decoderbufs_17       # PG 17
dnf install -y postgres-decoderbufs_16       # PG 16
dnf install -y postgres-decoderbufs_15       # PG 15
dnf install -y postgres-decoderbufs_14       # PG 14
apt install -y postgresql-18-decoderbufs   # PG 18
apt install -y postgresql-17-decoderbufs   # PG 17
apt install -y postgresql-16-decoderbufs   # PG 16
apt install -y postgresql-15-decoderbufs   # PG 15
apt install -y postgresql-14-decoderbufs   # PG 14

预加载配置

shared_preload_libraries = 'decoderbufs';

用法

来源:

decoderbufs 是一个无头的PostgreSQL逻辑复制输出插件,由Debezium PostgreSQL连接器使用。它将WAL更改转换为Protocol Buffers消息;它不会创建用户SQL模式,并不需要 CREATE EXTENSION

配置PostgreSQL

postgresql.conf 中启用该插件和逻辑复制,根据预期的消费者调整发送者和槽限制,然后重启PostgreSQL:

shared_preload_libraries = 'decoderbufs'
wal_level = logical
max_wal_senders = 8
max_replication_slots = 4

复制登录也需要具有 REPLICATION 属性,并且需要一个匹配的 pg_hba.conf 规则。使用适用于网络的安全认证方式,而不是README中的本地演示设置。

核心工作流程

创建一个输出插件为 decoderbufs 的逻辑槽:

SELECT *
FROM pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs');

psql 中检查时,请向插件请求调试文本:

SELECT data
FROM pg_logical_slot_peek_changes(
  'decoderbufs_demo', NULL, NULL, 'debug-mode', '1'
);

SELECT data
FROM pg_logical_slot_get_changes(
  'decoderbufs_demo', NULL, NULL, 'debug-mode', '1'
);

peek 不改变已确认的位置;get 会将其向前推进。正常的Debezium操作将消费由 pg_logicaldec.proto 定义的二进制消息,而不是启用调试模式。

关键对象和边界

  • decoderbufs 是创建槽时传递的逻辑复制输出插件名称。
  • debug-mode = 1 只用于故障排除的人类可读输出。
  • Protobuf 消息携带事务元数据、关系和列信息、操作类型、旧键以及带类型的值。
  • 需要为 UPDATEDELETE 表提供足够的数据的表需要适当的 REPLICA IDENTITY

逻辑槽保留WAL直到消费者确认进度。监控 pg_replication_slots 并故意删除废弃的槽以防止磁盘耗尽。模式变更、复制标识符、不支持的数据类型映射和大事务应与匹配的Debezium连接器版本一起进行测试。

上游构建需要PostgreSQL 9.6或更高版本以及protobuf-c;当可用时,会编译PostGIS支持。包发布跟随Debezium到3.6.0.Final,而插件控制元数据保持SQL版本0.1.0,因为这是一个输出插件而不是基于迁移的SQL扩展。