我正在尝试为我们的 PostgreSQL 9.5 数据库实现定期增量更改转储。
我选择了 WAL、wal2json
插件和pg_recvlogical
. 一切都以某种方式工作,除了一件事:
当所有数据都被读取时,pg_recvlogical
就会安静下来。没有办法让它在一段时间后不做任何改变就退出,对吧?所以我用kill -2
(SIGINT)终止它,这给了我
pg_recvlogical: unexpected termination of replication stream:
当我想要下一批更改时,复制槽从与以前相同的位置开始,即再次发送条目。
我如何告诉 PostgreSQL 对于某些插槽,我想将复制位置设置为客户端的当前位置?
有两个功能似乎可以做到这一点,
SELECT * FROM pg_replication_origin_advance(node_name text, pos pg_lsn)
SELECT * FROM pg_replication_origin_progress(node_name text, flush bool)
但是,我不确定将什么作为参数传递。说明书没说。什么是 node_name?而对于这个职位,wal2json
给我的只是xid
。
更新:我可以使用pg_replication_origin_advance("sas2json", "28/160E2250")
,请参阅我的答案。但是,当我尝试时:
错误:只有超级用户可以查询或操作复制源
这是在 Amazon RDS 中。而且我不能拥有 SUPERUSER - 这是 AWS 政策。
还有其他方法可以设置 LSN 位置吗?