pg_logical_emit_message() 是一个系统函数,用于将逻辑解码消息发出到 WAL。
pg_logical_emit_message() 在 PostgreSQL 9.6 中添加。
用法
PostgreSQL 17 及更高版本
pg_logical_emit_message (transactionalboolean,prefixtext,contenttext,flushboolean) →pg_lsn
pg_logical_emit_message (transactionalboolean,prefixtext,contentbytea,flushboolean) →pg_lsn
PostgreSQL 16 及更早版本
pg_logical_emit_message (transactionalboolean,prefixtext,contenttext) →pg_lsn
pg_logical_emit_message (transactionalboolean,prefixtext,contentbytea) →pg_lsn
此函数可用于通过 WAL 将任意消息以 text 或 bytea 格式传递给逻辑解码插件。
为了帮助插件过滤消息,可以提供一个 prefix 值,通常是插件扩展的名称。请注意,这纯粹是建议性的,由每个插件自行决定是否读取消息。前缀可以提供为空值。
变更历史
- PostgreSQL 17
- 添加了选项
flush(提交 173b56f1)
- 添加了选项
- PostgreSQL 9.6
- 添加 (提交 3fe3511d)
示例
pg_logical_emit_message() 的基本用法示例
postgres=# SELECT pg_logical_emit_message(false, 'foo', 'bar'); pg_logical_emit_message ------------------------- 0/14A24B0 (1 row)
相应的 WAL 记录是
rmgr: LogicalMessage len (rec/tot): 57/ 57, tx: 0, lsn: 0/014A2470, prev 0/014A22C8, desc: MESSAGE non-transactional, prefix "foo"; payload (3 bytes): 62 61 72
前缀和内容都可以提供为空字符串
postgres=# SELECT pg_logical_emit_message(false, '', ''); pg_logical_emit_message ------------------------- 0/2002960 (1 row)
参考资料
- PostgreSQL documentation: pg_logical_emit_message()
