Изменение типа значения в столбце JSONB в Postgres - PullRequest
0 голосов
/ 04 июля 2019

У меня есть столбец 'subject' типа JSONB, в котором хранятся объекты JSON. Примеры: {"team": "1234", "user": 5678} или {"org": 123} или {"team": 1234}.

Какой запрос я должен использовать, чтобы изменить все вхождения {"team": "1234", ...} на {"team": 1234, ...}?

Я пытался:

UPDATE the_table SET subject = jsonb_set(subject, '{team}', (subject->>'team')::int)

но я получаю:

ERROR: function jsonb_set(jsonb, unknown, integer) does not exist
LINE 2: SET subject = jsonb_set(subject, 'team', (subject->>'team'):... 
                      ^ 
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

1 Ответ

2 голосов
/ 04 июля 2019

Просто приведите результат subject->>'team' непосредственно к jsonb вместо int.Не забудьте добавить фильтр WHERE, иначе ваша вторая запись будет удалена.

demo: db <> fiddle

UPDATE the_table 
SET subject = jsonb_set(subject, '{team}', (subject->>'team')::jsonb)
WHERE subject->>'team' IS NOT NULL;
...