我有一个jsonb数组appliances
,如果该对象不存在,我会尝试将其推入其中。我正在尝试使用此查询
update home
set appliances = appliances ||
'{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'
where uuid = 'f5018a28-fd5f-43df-9d09-4e73da448823'
and not
'{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'::jsonb
< @ appliances;
但是会引发错误:
错误:运算符不存在:jsonb <@ jsonb []
列appliances
的数据类型为jsonb[]
。如何正确执行此查询?
答案 0 :(得分:0)
错误消息告诉您:您的列存储的是jsonb
(jsonb[]
)数组,而不是jsonb
(可以是jsonb数组或对象)。因此,基本上,您需要修复具有jsonb
列的架构,或者使用数组运算符而不是jsonb运算符。
这应该可行,因为jsonb
支持相等比较:
and not
'{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'::jsonb
= any(appliances)
答案 1 :(得分:0)
PostgreSQL数组上的<@
运算符和||
运算符需要两个操作数都是数组,而不仅仅是它们之一。
update home
set appliances = appliances ||
ARRAY['{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'::jsonb]
where uuid = 'f5018a28-fd5f-43df-9d09-4e73da448823'
and not
ARRAY['{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'::jsonb]
<@ appliances;