在执行以下插入类型时,出现以下错误:
质疑:
INSERT INTO accounts (type, person_id) VALUES ('PersonAccount', 1) ON
CONFLICT (type, person_id) WHERE type = 'PersonAccount' DO UPDATE SET
updated_at = EXCLUDED.updated_at RETURNING *
错误:
SQL 执行失败(原因: ERROR: 没有唯一或排除 与 ON 冲突规范匹配的约束)
我还有一个独特的索引:
CREATE UNIQUE INDEX uniq_person_accounts ON accounts USING btree (type,
person_id) WHERE ((type)::text = 'PersonAccount'::text);
问题是,有时候它工作,但不是每次。我 随机的得到 那个异常,真的很奇怪。它似乎不能访问那个 索引或它不知道它的存在。
有什么建议吗?
我使用的是 PostgreSQL 9.5.5。
执行尝试查找或创建帐户的代码时的示例:
INSERT INTO accounts (type, person_id, created_at, updated_at) VALUES ('PersonAccount', 69559, '2017-02-03 12:09:27.259', '2017-02-03 12:09:27.259') ON CONFLICT (type, person_id) WHERE type = 'PersonAccount' DO UPDATE SET updated_at = EXCLUDED.updated_at RETURNING *
SQL execution failed (Reason: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification)
在这种情况下,我确信这个帐户不存在。此外,当用户已经有一个帐户时,它不会输出错误。问题是,在某些情况下,如果还没有帐户,它也可以工作。查询完全相同。