在 Postgres 中,截断或删除行后,在pg_dump之前执行重新索引是否会优化pg_restore?



下面的REINDEX语句是否有助于恢复转储的操作或文件大小?

在SO或网络上的任何地方都找不到有关此的问题。我正在使用 Postgres 9.4 并清理一个非常大的数据库,其中包含各种表上的truncatedelete语句。

表数据的类型和大小各不相同。

完成此清理操作后,我立即执行pg_dump,tar 并上传,然后pg_restore。它使用目录格式,其中 12 个作业并行用于转储,8 个用于还原。

例如,首先进行以下查询:

TRUNCATE users;
DELETE FROM users_email WHERE active = 1;
REINDEX TABLE users;
REINDEX TABLE users_email;

然后:

$ pg_dump_9.4 --compress=0 -F directory -j 12 $DB_EXPORT_NAME -f $DB_DUMP_FOLDER 2>> operations.log
$ # do tar and upload with dump then:
$ pg_restore_9.4 -d $DB_IMPORT_NAME -j 8 $DB_DUMP_FOLDER 2>> operations.log

这对pg_dumppg_restore没有任何区别。

pg_dump根本不使用索引,它只是将其定义作为CREATE INDEX语句写入转储中。表本身按顺序扫描。

pg_restore使用转储中的CREATE INDEX创建索引。

相关内容

  • 没有找到相关文章

最新更新