在 Postgres 9.4 上 vacuum full 后我需要重新索引吗

Do I need to reindex after vacuum full on Postgres 9.4

我正在使用 Postgres 9.4。

我刚刚 运行 真空满了。我了解了 vacuum 和 vacuum full 之间的区别,并且考虑了很多我应该 运行 vacuum 还是 vacuum full。据我所知,我需要 vacuum full 并且我的数据库大小从 48 GB 下降到 24 GB。

旧索引在 vacuum full 后会过时吗?我需要 运行 重建索引吗?

我运行"vacuum full verbose analyze",所以分析是在真空满的情况下完成的。

我在几个地方读到,对于 Postgres > 9.0,我不需要在 vacuum full 后重新索引,但我想确定是这样的。

紧跟在 VACUUM FULL 之后的 REINDEX 没用 因为 VACUUM FULL 本身会重建索引。

这个在Recovering Disk Space的9.4文档中有提到:

...to reclaim the excess disk space it occupies, you will need to use VACUUM FULL, or alternatively CLUSTER or one of the table-rewriting variants of ALTER TABLE. These commands rewrite an entire new copy of the table and build new indexes for it.

你说得对,在 9.0 版之前情况并非如此,VACUUM FULL 以不同的方式重新实现。

到 8.4 版,VACUUM 的参考文档提到需要重建索引:

The FULL option does not shrink indexes; a periodic REINDEX is still recommended. In fact, it is often faster to drop all indexes, VACUUM FULL, and recreate the indexes.

但是这个警告现在已经过时了。