我正在尝试根据jsonb contacts_unique_idx
列,布尔data
列和{{1上的部分唯一索引(称为deleted
)在Postgres中增加联系记录}}布尔列:
duplicated
我的upsert函数(为简便起见,下面删除了CREATE UNIQUE INDEX contacts_uniqueness_idx ON contacts(
(data->>'customerId'),
LOWER(COALESCE(data->'data'->'profile'->'location'->>'formatted', '')), LOWER(COALESCE(data->'data'->'profile'->'name'->'anglican'->>'given', '')),
LOWER(COALESCE(data->'data'->'profile'->'name'->'anglican'->>'middlename', '')),
LOWER(COALESCE(data->'data'->'profile'->'name'->'anglican'->>'surname', '')),
LOWER(COALESCE(data->'data'->'profile'->'name'->'anglican'->>'suffix', '')), LOWER(COALESCE(data->'data'->'profile'->'name'->'anglican'->>'title', ''))
)
WHERE deleted = false and duplicated = false
)成功插入了一个联系人记录和多个联系人记录(如果它们不存在)。如果我将单个值传递给upsert,它还将成功更新现有记录,并根据现有记录数据和更新的记录数据(根据的values
部分在data
列上构建新的jsonb对象)功能。
但是,在将多个值传递给upsert时,我收到一个错误:DO UPDATE
,应该在该约束上进行更新。
ERROR: duplicate key value violates unique constraint "contacts_unique_idx"
这是并发问题吗?为什么我只能添加单个记录但不能多个记录?