如何将现有索引提升为 PostgreSQL 中的主键

Wil*_*ill 19 postgresql index primary-key

我知道如何在表中创建主键,但如何将现有索引设为主键?我正在尝试将现有表从一个数据库复制到另一个数据库。当我显示表格时,底部的索引是这种形式:

"my_index" PRIMARY KEY, btree (column1, column2)
Run Code Online (Sandbox Code Playgroud)

我已经创建了索引:

CREATE INDEX my_index ON my_table (column1, column2)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何使它成为主键......

更新:我的服务器版本是 8.3.3

gbn*_*gbn 25

您将使用 ALTER TABLE 添加主键约束。在 Postgres 中,您可以使用“ ALTER TABLE .. ADD table_constraint_using_index”形式“提升”索引

注意,主键的索引当然必须是唯一的

ALTER TABLE my_table 
    ADD CONSTRAINT PK_my_table PRIMARY KEY USING INDEX my_index;
Run Code Online (Sandbox Code Playgroud)

  • 在那个古老的版本中,唯一的方法是删除索引并添加一个新的 pk 约束。 (5认同)
  • @a_horse_with_no_name:你应该把它作为一个答案:你的评论早于另一个答案...... (2认同)

Cra*_*ein 10

我认为在那个版本的 postgresql 中不可能将索引转换为主键。

我只想删除现有索引并使用您指定的列创建主键。:

DROP INDEX my_index;
ALTER TABLE ONLY my_table ADD CONSTRAINT pk_my_table PRIMARY KEY(column1,column2);
Run Code Online (Sandbox Code Playgroud)

在 7.4 和 8.4 中工作