繁体   English   中英

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

[英]Creating unique index seems to fail, but is created anyway?

我正在创建一个唯一(多列)索引,但它失败了,因为表中已经存在非唯一行。 然而,索引似乎无论如何都被创建了......

这是我正在使用的 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 似乎还是被创建了。

这是意料之中吗?

这是在手册中记录的

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM