PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

47.1. 逻辑解码示例 #

以下示例演示如何在 SQL 环境中使用函数直接操控逻辑解码。

在使用逻辑解码之前,必须在 postgresql.conf 中设置 ??? 为 logical,且 ??? 至少设为 1。随后以超级用户身份连接目标数据库:

-- 创建使用 test_decoding 输出插件的逻辑复制槽
SELECT * FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding', false, true);

-- 查询当前集群中的复制槽状态
SELECT slot_name, plugin, slot_type, database, active, restart_lsn FROM pg_replication_slots;

-- 创建数据表并写入数据
CREATE TABLE data(id serial primary key, data text);
INSERT INTO data(data) VALUES('1'), ('2');

-- 读取并消费变更事件流
SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
    lsn    |  xid  |                          data
-----------+-------+---------------------------------------------------------
 0/BA5A688 | 10298 | BEGIN 10298
 0/BA5A6F0 | 10298 | table public.data: INSERT: id[integer]:1 data[text]:'1'
 0/BA5A7F8 | 10298 | table public.data: INSERT: id[integer]:2 data[text]:'2'
 0/BA5A8A8 | 10298 | COMMIT 10298
(4 rows)

-- 也可以仅预先窥探变更而不确认消费进度
SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL);