Postgresql Postgres更新JSON列中所有记录的第一条记录
我使用的是postgres 9.6.1 我有一个“orders”表,它有一个类型为JSON的列“orderData” orderData列中的每条记录当前的样子:Postgresql Postgres更新JSON列中所有记录的第一条记录,postgresql,Postgresql,我使用的是postgres 9.6.1 我有一个“orders”表,它有一个类型为JSON的列“orderData” orderData列中的每条记录当前的样子: [{"orderId":1}, {"orderId":2}, {"orderId":3}] [{"orderId":1, "isFirstOrder": true}, {"orderId":2}, {"orderId":3}] WITH order AS ( SELECT orderData FROM orders C
[{"orderId":1}, {"orderId":2}, {"orderId":3}]
[{"orderId":1, "isFirstOrder": true}, {"orderId":2}, {"orderId":3}]
WITH order AS (
SELECT orderData
FROM orders
CROSS APPLY OPENJSON(c) s
WHERE i = 1
)
UPDATE order
SET c = JSON_MODIFY(c, 'isFirstOrder', 'true');
我试图编写一个sql查询,为每个数组中的一阶对象添加一个键
查询后orderData列中的每条记录应该是什么样子:
[{"orderId":1}, {"orderId":2}, {"orderId":3}]
[{"orderId":1, "isFirstOrder": true}, {"orderId":2}, {"orderId":3}]
WITH order AS (
SELECT orderData
FROM orders
CROSS APPLY OPENJSON(c) s
WHERE i = 1
)
UPDATE order
SET c = JSON_MODIFY(c, 'isFirstOrder', 'true');
不工作尝试:
[{"orderId":1}, {"orderId":2}, {"orderId":3}]
[{"orderId":1, "isFirstOrder": true}, {"orderId":2}, {"orderId":3}]
WITH order AS (
SELECT orderData
FROM orders
CROSS APPLY OPENJSON(c) s
WHERE i = 1
)
UPDATE order
SET c = JSON_MODIFY(c, 'isFirstOrder', 'true');
任何帮助都将不胜感激。
c->0
获取数组的第一个元素| |
添加新属性jsonb_set
重写存在的元素,而{0}
在数组中定位重写位置对于类型
json
没有函数json\u set
。因此,您必须将json
数据转换为jsonb
,并将最终结果返回到json
:
UPDATE orders
SET c = jsonb_set(c::jsonb, '{0}', c::jsonb -> 0 || '{"isFirstOrder": true}')::json
您在哪里找到了
cross-apply
或openjson()
或json\u modify()
?我在文档中没有找到它。我在另一个stackoverflow答案中发现了它,当时我无法从pg文档中找到如何执行此操作。Fiddle非常完美。但当我尝试在数据库中运行它时,它失败了。“错误:函数jsonb_集(json,未知,文本)不存在”。我在本专栏中存储的数据可能存在问题?更新了我对json类型的回答。