我有一个带有非常大的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
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