postgres:将唯一对象推入jsonb数组

8fq7wneg  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(397)

我有一个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[] . 我怎样才能使这个问题正确?

4szc88ey

4szc88ey1#

这个 <@ 操作员和 || 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;
mtb9vblg

mtb9vblg2#

错误消息告诉您:您的列正在存储 jsonb ( jsonb[] ),不是 jsonb (可以是jsonb数组或对象)。所以基本上你需要要么修复你的模式要么 jsonb 列,或者使用数组运算符而不是jsonb运算符。
这应该管用,因为 jsonb 支持相等比较:

and not 
    '{"name": "Television", "uuid": "f6847317-d6fc-476f-8439-3a81f169e9ad"}'::jsonb 
    = any(appliances)

相关问题