xch*_*chg 5 postgresql index primary-key ddl
是否可以在不删除索引的情况下删除表上的主键约束?我有一种情况,我想删除PRIMARY KEY
以摆脱NOT NULL
约束并将其设置为另一个列对。我想避免删除和重新创建索引。可以只PRIMARY KEY
删除索引上的“属性”吗?删除约束会删除索引。
我使用的是 PostgreSQL 9.1 版。
我认为没有支持的方法来做到这一点。考虑到目前为止的评论。
要重新创建主键约束,而不在重建索引时阻止更新:
Run Code Online (Sandbox Code Playgroud)CREATE UNIQUE INDEX CONCURRENTLY dist_id_temp_idx ON distributors (dist_id); ALTER TABLE distributors DROP CONSTRAINT distributors_pkey, ADD CONSTRAINT distributors_pkey PRIMARY KEY USING INDEX dist_id_temp_idx;
对于您的情况,您可以创建 PK 第二次使用的相同索引和 新 PK 使用的索引。然后像示例中那样删除 PK,添加一个基于新索引的不同(与示例不同)PK 和一个UNIQUE
基于重复的前 PK 索引的新约束。全部在一个声明中。那只会锁定表一毫秒。
三个单独的命令(不在一个事务中):
CREATE UNIQUE INDEX CONCURRENTLY dupe_of_old_pk_idx ON tbl (old_pk_id);
CREATE UNIQUE INDEX CONCURRENTLY new_pk_idx ON tbl (new_pk_id1, new_pk_id2);
ALTER TABLE tbl
DROP CONSTRAINT tbl_pkey
, ADD CONSTRAINT tbl_uni UNIQUE USING INDEX dupe_of_old_pk_idx
, ADD CONSTRAINT tbl_pkey PRIMARY KEY USING INDEX new_pk_temp_idx;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5466 次 |
最近记录: |