【问题标题】:Doesn't Postgres reuse unique indexes for unique key constraint?Postgres 不会为唯一键约束重用唯一索引吗?
【发布时间】:2019-01-02 16:14:12
【问题描述】:

拥有使用 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 不会为唯一键约束重用唯一索引吗?

注意我不能删除索引,对应于唯一约束(错误说明相关约束),但如果我删除约束,索引会自动删除。

【问题讨论】:

  • @wildplasser 你能写出答案让我接受吗?

标签: postgresql


【解决方案1】:

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


ALTER TABLE agent
   ADD CONSTRAINT agent_uk UNIQUE USING agent_ux;

[未经测试]

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 2015-12-29
    • 2011-03-18
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2015-03-06
    • 2011-11-23
    相关资源
    最近更新 更多