decoderbufs是PostgreSQL逻辑解码器输出插件,用于以Protocol Buffers格式进行逻辑复制。
前提条件
支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:
Oracle语法兼容 2.0(内核小版本2.0.14.1.0及以上)
说明您可通过如下语句查看PolarDB PostgreSQL版(兼容Oracle)的内核小版本号:
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参数,详细操作请参考设置集群参数。修改该参数后集群将会重启,请在修改参数前做好业务安排,谨慎操作。
逻辑复制示例如下:
创建逻辑复制槽,并设置编解码插件为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类型与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 |