首页 > 解决方案 > Postgres:如何安全地删除副本?

问题描述

如果我永久删除它的唯一副本,我是否需要在主节点上做任何事情?我担心 WAL 文件会填满磁盘。

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

P -> R

我想删除 R。

标签: postgresqlreplicationdatabase-replication

解决方案


你的担心是绝对正确的。副本在存储的主服务器上创建复制槽restart_lsn。根据文档,restart_lsn是:

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

如果replica没有在这个replication slot中推进LSN,primary会保留所有从这个位置开始的WAL segment,并且忽略max_wal_sizelimit。

如果要删除副本并启用 WAL 轮换,则还必须删除复制槽:

postgres=# SELECT * FROM pg_replication_slots;
postgres=# SELECT pg_drop_replication_slot('replication_slot_name');

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


推荐阅读