创建唯一索引似乎失败了,但是还是创建了吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建唯一索引似乎失败了,但是还是创建了吗?相关的知识,希望对你有一定的参考价值。

正在创建唯一(多列)索引,但是失败,因为表中已经存在非唯一行。但是,索引似乎仍然可以创建...

这是我正在使用的SQL:

CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS company_by_code ON public.company USING BTREE("owner","org","code")

这将导致来自Postgresql的以下响应:

ERROR:  could not create unique index "company_by_code"
DETAIL:  Key (owner, org, code)=(ABC, DEF, XYZ) is duplicated.
SQL state: 23505

但是,尽管CREATE语句似乎出错了,但INDEX似乎还是被创建了。

这是可以预期的吗?

答案

这是documented in the manual

如果在扫描表时出现问题,例如死锁或唯一索引中的唯一性冲突,则CREATE INDEX命令将失败,但留下“无效”索引。该索引出于查询目的将被忽略,因为它可能不完整。但是它仍然会消耗更新开销。 psql \d命令将报告诸如INVALID的索引

如果您不希望这种行为,请不要使用CONCURRENTLY

以上是关于创建唯一索引似乎失败了,但是还是创建了吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建唯一索引

用于创建表并在两个字段上添加唯一索引的 Rails 迁移文件在迁移期间似乎被忽略了

MongoDB索引相关文章-摘自网络

Oracle数据库主键约束与唯一索引有啥区别?

面试官:数据库加了唯一索引,就不会有重复数据了吗???

mysql 利用唯一索引Unique 高并发创建不重复唯一订单号是不是和兴?