我有一张表,索引大小太大(约2G)。将数据库还原到VM时,大小只有200M,因此我需要重建/重新创建索引,并且可能会在线进行。
重建(重建索引)和重建索引之间有什么区别,当我在线进行索引时哪个更好?特别是,哪个选项允许在操作期间查询数据库?
答案 0 :(得分:2)
REINDEX
命令requires an exclusive table lock,这意味着它将停止对该表的所有访问,直到该命令完成。如果您能负担得起这种维护时段,那就太好了。
联机重建的另一种方法是使用CREATE INDEX CONCURRENTLY
创建一个新索引,然后删除旧索引。这将花费更长的时间才能完成,但是允许在重建索引的同时访问表。
答案 1 :(得分:1)
Postgres 12添加了一个REINDEX INDEX CONCURRENTLY
命令,该命令可以在这里执行您想要的操作。 https://paquier.xyz/postgresql-2/postgres-12-reindex-concurrently/ https://www.depesz.com/2019/03/29/waiting-for-postgresql-12-reindex-concurrently/