Postgres:如何安全删除副本?

Rus*_*ith 8 postgresql replication database-replication

如果我永久删除主节点的唯一副本,我需要在主节点上执行任何操作吗?我担心 WAL 文件会填满磁盘。

我想从单节点复制设置中删除唯一的副本:

P -> R

我想删除R。

olo*_*bus 7

您的担心是完全正确的。副本在主服务器上创建复制槽restart_lsn并存储在其中。根据文档,restart_lsn是:

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

如果副本不在该复制槽中提前 LSN,则主副本将保留从该位置开始的所有 WAL 段并忽略max_wal_size限制。

如果你想删除副本并启用 WAL 轮换,那么你还必须删除复制槽:

postgres=# SELECT * FROM pg_replication_slots;
postgres=# SELECT pg_drop_replication_slot('replication_slot_name');
Run Code Online (Sandbox Code Playgroud)

Postgres Commitfest 上有一个补丁,它引入了新的 GUC 来限制复制槽持有的 WAL 数量。然而,该补丁是长期有效的,但尚未提交。