首页 > 解决方案 > 在 PostgreSQL 中存档失败

问题描述

pg_wal文件夹越来越大,当我查询文件时archiver没有存档。

postgres=# select * from pg_stat_archiver;
 archived_count | last_archived_wal | last_archived_time | failed_count |             last_failed_wal              |       last_failed_time        |          stats_reset          
----------------+-------------------+--------------------+--------------+------------------------------------------+-------------------------------+-------------------------------
              0 |                   |                    |        19404 | 000000010000000E00000018.00000028.backup | 2019-09-03 11:35:07.161632+08 | 2019-08-30 09:58:19.943897+08
(1 row)

来自失败归档命令的消息是:

test ! -f /var/lib/postgresql/10/main/pg_wal/000000010000001D00000024 && cp pg_wal/000000010000001D00000024 /var/lib/postgresql/10/main/pg_wal/000000010000001D00000024 cp: cannot create regular file '/var/lib/postgresql/10/main/pg_wal/000000010000001D00000024': No such file or directory

在主postgresql.conf文件中有一个archive_command

test ! -f /var/lib/postgresql/10/main/pg_wal/%f && cp %p /var/lib/postgresql/10/main/pg_wal/%f

这个路径var/lib/postgresql/10/main/pg_wal/%f是我要归档到的从服务器中的路径。然后我pg_basebackup在复制服务器中运行以复制数据库。数据确实复制到了复制服务器,但是在主服务器中,当我签入时,WAL 文件没有存档pg_stat_archiver

标签: postgresqldigital-ocean

解决方案


您必须查看服务器日志文件,在那里您将看到一条错误消息和来自archive_command.

这会告诉你哪里出了问题,以便你可以修复它。

一旦问题得到解决,PostgreSQL 将归档 WAL 文件,一切都会恢复正常。

经过一番调查,事实证明您配置archive_command为将 WAL 文件写入从服务器的pg_wal目录,它与从服务器的 WAL 文件发生冲突。

您必须将 WAL 存档写入其他地方,而不是写入从站的数据目录。


推荐阅读