Добавление (нажатие) и удаление из массива JSON в PostgreSQL 9.5+
Я создал таблицу в PostgreSQL, используя следующую команду:
CREATE TEMP TABLE jsontesting
AS
SELECT id, jsondata::jsonb FROM ( VALUES
(1, '["abra","value","mango", "apple", "sample"]'),
(2, '["japan","china","india", "russia", "australia"]'),
(3, '["must", "match"]'),
(4, '["abra","value","true", "apple", "sample"]'),
(5, '["abra","false","mango", "apple", "sample"]'),
(6, '["string","value","mango", "apple", "sample"]'),
(7, '["must", "watch"]')
) AS t(id,jsondata);
Теперь я хотел
-
добавить. Что-то вроде append_to_json_array принимает фактическую jsondata, которая представляет собой json-массив и newString, которые я должен добавить в этот массив jsondata, и эта функция должна возвращать обновленный json-массив,
UPDATE jsontesting
SET jsondata=append_to_json_array(jsondata, 'newString')
WHERE id = 7;
-
удалить значение из массива данных json, одну функцию для удаления значения.
Я попытался найти документацию PostgreSQL, но ничего там не нашел.
Ответы
Ответ 1
Чтобы добавить значение, используйте операнд массива JSON (||
)
UPDATE jsontesting
SET jsondata = jsondata || '["newString"]'::jsonb
WHERE id = 7;
Удаление значения выглядит следующим образом
UPDATE jsontesting
SET jsondata = jsondata - "newString"
WHERE id = 7;
Конкатенация к вложенному полю выглядит следующим образом
UPDATE jsontesting
SET jsondata = jsonb_set(
jsondata::jsonb,
array['nestedfield'],
(jsondata->'nestedfield')::jsonb || '["newString"]'::jsonb)
WHERE id = 7;
Ответ 2
Чтобы добавить к ответу Эвана Кэрролла, вы можете сделать следующее, чтобы установить столбец в пустой массив, если он NULL
. Оператор append (||
) ничего не делает, если столбец в настоящее время NULL
.
UPDATE jsontesting SET jsondata = (
CASE
WHEN jsondata IS NULL THEN '[]'::JSONB
ELSE jsondata
END
) || '["newString"]'::JSONB WHERE id = 7;