如何使用PostgreSQL的"pg_restore"和零停机时间恢复数据?



我试图恢复一个大表

pg_restore.exe -U postgres -d db_name --clean --if-exists --single-transaction F:BackupsPostgreSQLdata.dump.gz

所以我有一个读锁几分钟。如何在读取时零停机的情况下恢复数据?我只需要阅读。

您不需要执行--clean,而是只执行--data,而是在COPY之前在同一事务中执行DELETE from tablename。我不认为有什么方法可以让pg_restore为您做到这一点,但您可以将pg_restore的输出转储到一个文件中并对其进行编辑,或者使用sed或perl之类的东西来注入DELETE。

这应该适用于不需要引用的表名,并且假设所复制的数据都没有以"COPY"开头的第一列:

pg_restore --data-only --single-transaction dmp.dmp -f -| perl -pe 's/^COPY ([w.]+)/delete from $1; copy $1/' | psql -U postgres -d db_name

然而,在我看来,你的模式更改方法并没有那么脏。它仍然需要一个瞬时访问独占锁,所以它并不是真正的零停机时间,但如果它能足够快地获得所述锁,它可能是不明显的停机时间。

相关内容

  • 没有找到相关文章

最新更新