Postgres更新所有记录的JSON列中的第一条记录

时间:2018-11-05 16:00:59

标签: postgresql

我正在使用Postgres 9.6.1。

我有一个“订单”表,该表的列“ orderData”为JSON类型。

orderData列中的每个记录当前如下所示:

runs=range(1,21)

for i in runs:

     Myfile=np.loadtxt("myfile_%s.txt" %i, delimiter=',', unpack=True)

我正在尝试编写一个SQL查询,该查询将键添加到每个数组中的一阶对象。

查询后,orderData列中的每条记录应如下所示:

[{"orderId":1}, {"orderId":2}, {"orderId":3}]

不尝试:

[{"orderId":1, "isFirstOrder": true}, {"orderId":2}, {"orderId":3}]

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

demo:db<>fiddle

UPDATE orders
SET c = jsonb_set(c, '{0}', c -> 0 || '{"isFirstOrder": true}');
  1. c -> 0获取数组的第一个元素
  2. ||添加新属性
  3. jsonb_set重写元素(如果存在),而{0}定位数组中的重写位置

Postgres JSON functions


对于类型json,没有功能json_set。因此,您需要将json数据转换为jsonb,最后将结果转换为json

UPDATE orders
SET c = jsonb_set(c::jsonb, '{0}', c::jsonb -> 0 || '{"isFirstOrder": true}')::json

demo:db<>fiddle