我如何指示 Postgres 完成所有“正在进行的”事务,但延迟启动新的事务(不踢出客户端),直到我拍摄 ZFS 或 LVM 快照(这需要不到一秒钟)。
例如
- 暂停 Postgres,等待“正在进行的”事务完成
- 同步到磁盘
- 获取 ZFS/LVM 快照
- 恢复 Postgres
答案1
这个答案dba.stackexchange 上的内容似乎就是您所追求的。
评论似乎不会自动链接到侧边栏(网络内部),所以我需要写更多的东西来防止自动转换为评论......是的。
答案2
@user121391 回答中提到的帖子是正确的,但简而言之:
- 你不能暂停postgresql 以任何方式(强制它继续打开事务并且不处理新事务)
- 如果底层快照是原子的(ZFS 快照似乎是原子的),则在快照之前无需执行任何操作,如果
postgres
在快照上运行新进程,数据库将以恢复模式启动(就像前一个进程异常停止时一样)。 pg_start_backup
将使恢复过程更快一些(因为已建立检查点,并且 WAL 中的待处理写入将会减少)