archive_cleanup_command 不清除存档的wal文件

archive_cleanup_command does not clear the archived wal files

主要问题:
postgresql.conf 文件中的 archive_cleanup_command 不会清除存档的 wal 文件。我怎样才能让它清除存档的 wal 文件?

相关信息:

我的当前设置:
/etc/postgresql/13/main/postgresql.conf 文件:

wal_level = replica
wal_compression = on

wal_recycle = on
checkpoint_timeout = 5min

max_wal_size = 1GB
min_wal_size = 80MB

archive_mode = on
archive_command = 'pxz --compress --keep --force -6 --to-stdout --quiet %p > /datadrive/postgresql/13/wal_aerchives/%f.xz'

archive_timeout = 10min

restore_command = 'pxz --decompress --keep --force -6 --to-std-out --quiet /datadrive/postgresql/13/wal_archives/%f.xz > %p'

archive_cleanup_command = 'pg_archivecleanup -d -x .xz /datadrive/postgresql/13/wal_archives %r >> /datadrive/postgresql/13/wal_archives/archive_cleanup_command.log 2>&1'

archive_cleanup_command.log 有 777 个权限。

我有一个主数据库对发布进行逻辑复制,还有一个从数据库订阅该发布。我打算在奴隶上进行归档和恢复点。

我期待发生什么?
postgresql.conf 文件中的检查点超时设置意味着至少每 5 分钟创建一个重启点。 archive_timeout 设置为 10 分钟意味着 postgresql 在每 10 分钟后强制执行一次日志文件段切换。因此,至少每 10 分钟,就会创建一个重启点。每当创建重启点时,存档清理命令为运行。当此命令为 运行 时,它将清除所有早于此重启点的 .xz 文件。因此 wal_archives 目录实际上不应包含早于 20 分钟甚至 2 小时的 .xz 文件....

到底发生了什么?

我尝试了什么?

重启点,restore_commandarchive_cleanup_command 仅适用于流式(“物理”)复制,或一般恢复,不适用于逻辑复制。

逻辑复制备用数据库不在恢复中,它已打开以进行读写。在该状态下,archive_cleanup_command 等恢复设置将被忽略。

您将不得不找到另一种机制来删除旧的 WAL 档案,最好与您的备份解决方案结合使用。