我已经使用复制槽配置了流式复制。我已经检查了视图
pg_replication_slots
其中包含
restart_lsn pg_lsn
最旧的
LSN
的地址 (WAL
) 仍然可能被该槽的消费者所需要,因此在检查点期间不会被自动删除。
我想在主存档之前找到我的备用所需的最小
WAL
。
我想将
LSN
转换为 WAL
但我找不到任何命令。请帮我解决这个问题。
可以使用这个公式将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
考虑使用 pg_xlogfile_name - 它需要日志序列号并“生成”要查找的
WAL
文件名。
pg_xlogfile_name(location pg_lsn) text 转换事务日志 位置字符串到文件名