具有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不会将唯一索引用于唯一键约束吗?
注意,我无法删除与唯一约束相对应的索引(有关相关约束的错误提示),但是如果删除约束,索引会自动删除。
答案 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;
[未测试]