pg_receivewal
是一个用于在写入时存档WAL文件更改(包括.partial WAL文件)的核心实用程序。
pg_receivewal
在PostgreSQL 9.2中引入(作为pg_receivexlog
)。
用法
虽然它可以作为独立的实用程序运行,但pg_receivewal
通常用作更全面的备份和归档解决方案的一部分,例如Barman,它使用pg_receivewal
(通常与复制槽位结合使用)来最大化从PostgreSQL接收的WAL数量,从而最大程度地减少潜在的数据丢失。
注意事项
WAL文件将从pg_receivewal
启动的时间点开始存档,即使源服务器上存在较早的WAL文件。
如果在指定的存档目录中存在WAL文件,pg_receivewal
将假定这些文件来自之前的调用,并在新的WAL可用之前等待,然后恢复存档。但是,由于无法确定WAL是否源自同一服务器,因此如果目录包含来自其他来源的WAL,则可能导致存档的WAL文件集实际上已损坏。
更改历史记录
- PostgreSQL 17
- PostgreSQL 16
- 处理
SIGTERM
就像SIGINT
一样(提交8b60db77)
- 处理
- PostgreSQL 15
- PostgreSQL 11
- PostgreSQL 10
- PostgreSQL 9.5
- PostgreSQL 9.4
- 添加了选项
-S
/--slot
(提交858ec118)
- 添加了选项
- PostgreSQL 9.3
- PostgreSQL 9.2
- 添加(提交d9bae531)
源代码
pg_receivewal
作为pg_basebackup
的一部分构建,因为它实际上是添加到pg_basebackup
以支持在备份期间流式传输WAL文件的功能的前端接口。
pg_receivewal
二进制文件的主要源文件是src/bin/pg_basebackup/pg_receivewal.c;大部分实际功能包含在src/bin/pg_basebackup/receivelog.c中。
示例
pg_receivewal
的非常基本的调用
pg_receivewal -d 'host=node1 dbname=postgres user=repuser' -D /data/wal
请注意,该进程不会自行后台运行或守护进程化。
这将导致存档的WAL文件存储在指定的目录中,例如
$ ls -1 /data/wal 000000010000000000000003 000000010000000000000004 000000010000000000000005 000000010000000000000006 000000010000000000000007 000000010000000000000008 000000010000000000000009.partial
如果上述进程终止(例如,使用Ctrl-C),它可能会输出如下消息
pg_receivewal: not renaming "000000010000000000000009.partial", segment is not complete
参考文献
- PostgreSQL文档: pg_receivewal
有用链接
- 使用pg_receivewal永不丢失PostgreSQL事务 - 2019年10月CyberTec博客文章