【发布时间】:2020-08-13 18:56:18
【问题描述】:
我有一个包含两列的 Postgres 表 timeline:
- user_id (varchar)
- 项目(json)
这是itemsjson字段的结构:
[
{
itemId: "12345",
text: "blah blah"
},
//more items with itemId and text
]
我需要删除所有items,其中itemId 等于给定值。例如12345
我有这个有效的 SQL:
UPDATE timeline
SET items = items::jsonb - cast((
SELECT position - 1 timeline, jsonb_array_elements(items::jsonb)
WITH ORDINALITY arr(item_object, position)
WHERE item_object->>'itemId' = '12345') as int)
它工作正常。它仅在子查询没有返回任何项目时失败,即当没有 itemId 等于“12345”的项目时。在这些情况下,我会收到此错误:
“items”列中的空值违反非空约束
我该如何解决这个问题?
【问题讨论】:
标签: sql json postgresql