3

我必须编写一个迁移命令来从索引中删除一列。目前让我们说我有table1索引col1 and col2

我想col1从索引中删除。我正在查看https://www.postgresql.org/docs/9.4/static/sql-alterindex.html但似乎我实际上不能只删除一列?

如果是,是否最好删除该列以及如何 VS

  • 创建新索引
  • 删除旧索引

另外,如果我需要降级,我想做相反的事情。所以只是想知道如何实现这一点

4

2 回答 2

4

不存在更改索引的能力,因为要这样做,您必须销毁并使用新列重新创建索引。默认情况下,Postgres 使用 B-Trees 创建索引,删除列会导致 B-Tree 无效。因此,B-Tree 需要从头开始构建。

如果您想了解有关索引如何在后台工作的更多详细信息,这是一篇很好的文章:Postgres Indices Under the Hood

于 2018-07-27T22:22:16.943 回答
1

您是对的,您必须创建一个包含单列的新索引,然后删除包含两列的旧索引。

于 2018-07-27T19:44:36.417 回答