下面的REINDEX
语句是否有助于恢复转储的操作或文件大小?
在SO或网络上的任何地方都找不到有关此的问题。我正在使用 Postgres 9.4 并清理一个非常大的数据库,其中包含各种表上的truncate
和delete
语句。
表数据的类型和大小各不相同。
完成此清理操作后,我立即执行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_dump
或pg_restore
没有任何区别。
pg_dump
根本不使用索引,它只是将其定义作为CREATE INDEX
语句写入转储中。表本身按顺序扫描。
pg_restore
使用转储中的CREATE INDEX
创建索引。