decoderbufs(解码为ProtoBuf)

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插件默认会自动加载,无需手动加载扩展。wal_level参数的值需设置为logical,即在预写式日志WAL(Write-ahead logging)中增加支持逻辑编码所需的信息。

说明

您可以通过控制台设置wal_level参数,详细操作请参考设置集群参数。修改该参数后集群将会重启,请在修改参数前做好业务安排,谨慎操作。

逻辑复制示例如下:

  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字段

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