Postgres不会将唯一索引用于唯一的键约束吗?

时间:2019-01-02 16:14:13

标签: postgresql

具有Oracle的经验,我认为每个唯一约束都将重用唯一索引。

我创建了模式填充脚本,该脚本创建命名的唯一索引,然后创建相同的唯一约束。通过这种方式,我希望显式设置索引名称,而不是中继Postgres默认命名模式。

实验表明,结果得到两个具有相同定义的索引:

CREATE UNIQUE INDEX agent_ux ON agent (branch_id, initials);
ALTER TABLE agent ADD CONSTRAINT agent_uk UNIQUE (branch_id, initials);

select indexname from pg_indexes where tablename = 'agent';
agent_ux
agent_uk

Postgres不会将唯一索引用于唯一键约束吗?

注意,我无法删除与唯一约束相对应的索引(有关相关约束的错误提示),但是如果删除约束,索引会自动删除。

1 个答案:

答案 0 :(得分:1)

在postgres中,创建UNIQUE约束会自动创建一个索引。您还可以使用ALTER TABLE ttt add constraint ccc USING xxx语法通过{em>提升现有索引来创建约束:Documentation


ALTER TABLE agent
   ADD CONSTRAINT agent_uk UNIQUE USING agent_ux;

[未测试]