将 pg_LSN 转换为 wAL postgresql

问题描述 投票:0回答:2

我已经使用复制槽配置了流式复制。我已经检查了视图

pg_replication_slots
其中包含

restart_lsn pg_lsn

最旧的

LSN
的地址 (
WAL
) 仍然可能被该槽的消费者所需要,因此在检查点期间不会被自动删除。

我想在主存档之前找到我的备用所需的最小

WAL

我想将

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

postgresql postgresql-9.4
2个回答
2
投票

可以使用这个公式将LSN转换为WAL文件名:

(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/  | grep TimeLine
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1

0
投票

考虑使用 pg_xlogfile_name - 它需要日志序列号并“生成”要查找的

WAL
文件名。

pg_xlogfile_name(location pg_lsn) text 转换事务日志 位置字符串到文件名

© www.soinside.com 2019 - 2024. All rights reserved.