pg_logical_emit_message()
是一个用于将逻辑解码消息发送到 WAL 的系统函数。
pg_logical_emit_message()
在 PostgreSQL 9.6 中添加。
用法
PostgreSQL 17 及更高版本
pg_logical_emit_message (transactional
boolean
,prefix
text
,content
text
,flush
boolean
) →pg_lsn
pg_logical_emit_message (transactional
boolean
,prefix
text
,content
bytea
,flush
boolean
) →pg_lsn
PostgreSQL 16 及更早版本
pg_logical_emit_message (transactional
boolean
,prefix
text
,content
text
) →pg_lsn
pg_logical_emit_message (transactional
boolean
,prefix
text
,content
bytea
) →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 文档: pg_logical_emit_message()