Добавление к правильному ответу Майка, в случае, если мы хотим изменить существующие таблицы с помощью json массивов, чтобы включить статус, мы можем:
-- First create the table
CREATE TABLE myJson AS
SELECT '[
{
"batch_id": "40",
"state_id": "10"
},
{
"batch_id": "50",
"state_id": "60"
}
]'::json js;
WITH unnest_and_concat AS (
SELECT json_array_elements(js)::jsonb || json_build_object('current_status', 'pending')::jsonb jee
FROM myJson)
SELECT json_agg(jee)::json
FROM unnest_and_concat;
Конечно, это предназначено только для работы с таблицей этими рядами (для иллюстрации). Если цель состоит в том, чтобы обновить всю таблицу, мы можем сделать это (в идеале с помощью LATERAL JOIN
), смешанного с оператором обновления. Выглядит так:
UPDATE myJson
SET old_col=new_col
FROM <insert subquery or table>
WHERE myJson.id = new_table.id;
Тем не менее, я бы рекомендовал вносить изменения при вставке, а не обновлять.