gpt4 book ai didi

PostgreSQL 复制 - 如何在使用 pg_recvlogical 和 wal2json 读取后更新 LSN? (没有 super 用户)

转载 作者:行者123 更新时间:2023-11-29 13:43:44 26 4
gpt4 key购买 nike

我正在尝试为我们的 PostgreSQL 9.5 数据库实现定期增量更改转储。

我选择了 WAL、wal2json 插件和 pg_recvlogical。一切都以某种方式工作,除了一件事:

当所有数据都被读取时,pg_recvlogical 就变得安静了。没有办法让它在一段时间后不做任何更改就退出,对吧?所以我用 kill -2 (SIGINT) 终止它,这给了我

pg_recvlogical: unexpected termination of replication stream: 

当我想要下一批更改时,复制槽从与以前相同的位置开始,即再次发送条目。

我如何告诉 PostgreSQL 对于某个槽,我想将复制位置设置为客户端的当前位置?

似乎有 2 个函数可以做到这一点,

  • SELECT * FROM pg_replication_origin_advance(node_name text, pos pg_lsn)
  • SELECT * FROM pg_replication_origin_progress(node_name text, flush bool)

但是,我不确定要传递什么作为参数。 manual doesn't tell . node_name 是什么?对于这个位置,wal2json 给我的是 xid

更新:我可以使用pg_replication_origin_advance("sas2json", "28/160E2250"),看我的回答。 但是,当我尝试时:

ERROR: only superusers can query or manipulate replication origins

这是在 Amazon RDS 中。我不能拥有 SUPERUSER - 这是 AWS 政策。

还有其他设置LSN位置的方法吗?

最佳答案

我发现我可以为 wal2json 启用 -o include-lsn=true。有了它,它开始给我

{"xid":48311,"nextlsn":"28/160E2250", ...

所以我可以使用nextlsn来调用

SELECT * FROM pg_replication_origin_advance("sas2json", "28/160E2250")

第一个参数是复制槽。

虽然这回答了我最初的问题,但我需要一个不需要 SUPERUSER 的解决方案 - 如果有的话。

关于PostgreSQL 复制 - 如何在使用 pg_recvlogical 和 wal2json 读取后更新 LSN? (没有 super 用户),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51749246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com