I have a jsonb
column data
in a Postgres table my_table
. It contains the following data:
[
{"id":"1","status":"test status1","updatedAt":"1571145003"},
{"id":"2","status":"test status2","updatedAt":"1571145323"}
]
I want to update the updatedAt
key of all objects in that array using one query. I tried:
update my_table set data = data || '{"updatedAt": "1571150000"}';
The above query added a new object within the array like the following:
[
{"id":"1","status":"test status1","updatedAt":"1571145003"},
{"id":"2","status":"test status2","updatedAt":"1571145323"},
{"updatedAt":"1571150000"}
]
I want the output like:
[
{"id":"1","status":"test status1","updatedAt":"1571150000"},
{"id":"2","status":"test status2","updatedAt":"1571150000"}
]
I also tried jsonb_set()
, but that needs the second parameter to be the array index. I can't be sure of the count of JSON objects in the array.
If this can be solved with custom functions, also fine.
Best Answer
First cte unnest all elements of the array, second one update each element and then simply update the original table building the array again.
db<>fiddle here