pg_dump和pg_restore postgres db有一个很大的表,其中排序很重要

时间:2018-03-18 13:46:52

标签: postgresql pg-dump pg-restore

我有一个带有非常大的versions表(审计跟踪)的postgres数据库,我正在尝试以最短的停机时间提出最快的方式来转储和恢复数据库。

到目前为止,我已经完成了两种方法。直截了当 -

pg_dump $DB_URL --no-acl --no-owner --format=directory --jobs=8 --file=my-db.dir

然后pg_restore --no-acl --jobs=8 --format=directory -d $NEW_DB my-db.dir

这需要大约4个小时。很好,但不是很好。 在恢复所有其他表并重新启动我的应用程序之后,我回填versions表是一种更加绚丽的方式(顺序保持正常,行正在正确写入空versions表)< / p>

pg_dump $DB_URL --no-acl --no-owner --file=my-db-without-versions.dir --format=directory --jobs=8 --exclude-table-data=versions

然后恢复,同时自行转储versions表。

pg_restore --no-acl --jobs=8 --format=directory -d $NEW_DB my-db-without-versions.dir

pg_dump $DB_URL --no-acl --no-owner --format=directory --data-only --table=versions --column-inserts --file=versions.dir

恢复很快完成,然后我使用插入运行versions的恢复。这种方法唯一的问题是用填充物回填这个表需要F-O-R-E-V-E-R,但我认为我需要这样做才能保持表的完整性。

我在这里可以忽略一些东西吗?或者有更好/更安全/更有效的方法吗?

postgres和pg工具9.6.6

0 个答案:

没有答案