Postgresql,通过挂载写入存档文件,防止同时访问?

Fra*_*fka 4 postgresql backup postgresql-9.2

我正在使用 Postgres 9.2.1 并将我的可存档 WAL 保存在 NFS 共享上。

我只使用基本命令,在 postgresql.conf 中作为示例给出

test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f

cp 命令是否以某种方式保护我的备份服务器,它读取 WAL 档案,不读取一半复制的 WAL 文件?我是否必须手动定义一个cp命令,让文件以 结尾,.tmp然后调用rename以给它正确的名称?

有人有保存的例子archive_command吗?

red*_*guy 5

NFS 和 cp 都不会保护您免受部分写入。缓解写入原子性问题的常用方法是在复制(或写入)完成后使用临时文件和 mv。你可能会使用类似的东西:

    test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/tmp/%f && \
    mv /mnt/server/archivedir/tmp/%f /mnt/server/archivedir/%f
Run Code Online (Sandbox Code Playgroud)