Postgresql обновить значение в столбце массива jsonb - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть одна таблица с jsonb и этими данными внутри:

[
{
    "valor": "2025,79",
    "parcela": 46,
    "vencimento": 1570503600000
},
{
    "valor": "1987,7",
    "parcela": 47,
    "vencimento": 1573182000000
},
{
    "valor": "1950,47",
    "parcela": 48,
    "vencimento": 1575774000000
},
{
    "valor": "1912,88",
    "parcela": 49,
    "vencimento": 1578452400000
}

]

, но теперь мне нужно во всех строках изменить значение в "vencimento" с 1573182000000 на " 10/10/2010 "

это возможно?

с помощью этого кода я могу разбить массив на столбцы и изменить значение te

SELECT id, jsonb_set(d, '{vencimento}',
 quote_ident(to_char(to_timestamp(cast((d -> 'vencimento')::varchar as bigint) / 1000)::date, 'dd/mm/yyyy'))::jsonb
) 
    FROM notificato.requerimento, jsonb_array_elements(parcela) d where id = 1;

, но как мне обновить мой строка?

ткс

1 Ответ

1 голос
/ 20 февраля 2020

Соберите значения обратно в массив jsonb с помощью jsonb_agg и присвойте его вашему столбцу:

UPDATE notificato.requerimento
SET parcela = (SELECT jsonb_agg(
  jsonb_set(d, '{vencimento}', to_jsonb(to_char(to_timestamp((d ->> 'vencimento')::bigint / 1000)::date, 'dd/mm/yyyy'))
) FROM jsonb_array_elements(parcela) d)
WHERE id = 1;
...