Преобразовать значение ключа jsonb в массив значений ключа - PullRequest
0 голосов
/ 25 августа 2018

Для приложения для создания заметок у меня есть следующий документ json в моей схеме PostgreSQL:

postgres=# select id, data from notes where id=107;
 id  |                                           data                                           
-----+-----------------------------------------------------------------    
 107 | {"tag": "sample tag", "title": "sample title", "content": "sample title\n\nsample text"}

, чтобы иметь возможность использовать несколько тегов в будущем, я хочу преобразовать каждую существующую запись в моей базе данныхиз приведенного выше, чтобы быть в массиве, как это: "tag": ["sample tag"]

Я провел некоторое исследование и, играя вокруг, я стал немного ближе с чем-то вроде:

UPDATE notes SET data = jsonb_set(data, '{tag}', $$["sample tag", "xyz"]$$);

, который фактически обновляетстрока от "tag": "sample tag" до "tag": ["sample tag", "xyz"], но я хочу, чтобы это динамически проходило через все мои записи с существующими тегами.Я не мог найти способ запустить что-то вроде подзапроса в части jsonb_set.

1 Ответ

0 голосов
/ 25 августа 2018

Используйте функцию jsonb_build_array():

update notes
set data = jsonb_set(data, '{tag}', jsonb_build_array(data->'tag'));

Рабочий пример в rextester.

...