将pg_LSN转换为wAL Postgresql

3
我已经配置了使用复制槽的流复制。我已经检查了视图pg_replication_slots,其中包含
restart_lsn pg_lsn

这个槽位的使用者可能仍需要最老的WAL(LSN)地址,因此在检查点期间不会自动删除。

我想找到我的备用机需要的最小WAL,在主服务器归档相同之前。

我考虑将LSN转换为WAL,但我找不到任何命令。请帮我解决这个问题。


你实际上无法将这两者转换。LSN只是存储在WAL中的另一段数据。要尝试进行转换,你需要扫描WAL以寻找特定的LSN。你应该提出一个新问题,重点关注你真正想知道的内容。你提到了关于“备用服务器所需的最小WALL”的一些内容,但并不清楚你实际上想要了解什么。 - undefined
2个回答

1
LSN(日志序列号)转换为WAL(Write-Ahead Log)文件名可以使用此公式进行操作:
(FF000000 * xlog_master + offset_master) - (FF000000 * xlog_replica + offset_replica)

在任何 PostgreSQL 实例上运行以下命令(最好是相同的主要版本):
PostgreSQL >=10:
psql -t -c "select pg_walfile_name('9F81/724931C8');"

PostgreSQL < 10:

psql -t -c "select pg_xlogfile_name('9F81/724931C8');"

会给你一个像这样的数字:

0000000100009F8100000072

假设您的服务器正在运行时间线1(前8位数字00000001

您可以使用pg_controldata来查找您的服务器正在运行的时间线

/usr/lib/postgresql/10/bin/pg_controldata /var/lib/postgresql/10/main/

0

考虑使用pg_xlogfile_name - 它接受日志序列号并“生成”WAL文件名以供查找。

pg_xlogfile_name(位置 pg_lsn)文本 将事务日志位置字符串转换为文件名


@VaoTsun:我正在运行一个主服务器和两个从服务器进行复制,因此无法自动清理归档文件。我必须手动检测最安全的xlog文件名以从我的wal归档中删除。这个查询是否能获得我想要的正确信息 select min(pg_xlogfile_name(replay_location)) from pg_stat_replication?谢谢。 - undefined
pg_xlogfile_name函数现在被称为pg_walfile_name - undefined
它曾经在2016年使用过 :) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接