PostgreSQL修改索引和删除索引并创建索引的区别

5
我必须编写一个迁移命令来从索引中删除一列。当前,假设我有一个名为table1的表,其在col1和col2上都有索引。
我想从索引中删除col1。我正在查看https://www.postgresql.org/docs/9.4/static/sql-alterindex.html,但似乎实际上无法只是删除一列?
如果可以的话,是创建新索引还是删除旧索引更好呢?
  • 创建新索引
  • 删除旧索引
此外,如果我需要进行降级,我想要执行相反的操作。所以我想知道如何实现这一点。
2个回答

8
更改索引的能力并不存在,因为为了这样做,您必须使用新列销毁并重新创建索引。默认情况下,Postgres使用B-Tree创建索引,删除列会导致该B-Tree变得无效。因此,需要从头开始构建B-Tree。
如果您想了解有关索引如何在底层工作的更多详细信息,请参阅此文章:Postgres Indices Under the Hood

1
这还是现状吗?我看到有 ALTER INDEX:https://www.postgresql.org/docs/13/sql-alterindex.html - user9503053

2

你是对的,你需要创建一个新的只有单列的索引,然后删除一个有两列的旧索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接