以下示例演示如何在 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);