これを使用して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);
今私が望んだのは
addappend_to_json_arrayのようなものは、json-arrayである実際のjsondataとnewStringを受け取りますそのjsondata配列に追加する必要があり、この関数は更新されたjson-arrayを返す必要があります。
UPDATE jsontesting
SET jsondata=append_to_json_array(jsondata, 'newString')
WHERE id = 7;
removejsonデータ配列の値、値を削除するための1つの関数。
PostgreSQLのドキュメントを検索しようとしましたが、何も見つかりませんでした。
値を追加するには、JSON配列append opperator(||
)
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;
Evan Carrollの答えに追加するには、次の手順を実行して、列がNULL
である場合に空の配列に設定します。追加演算子(||
)列が現在NULL
である場合は何もしません。
UPDATE jsontesting SET jsondata = (
CASE
WHEN jsondata IS NULL THEN '[]'::JSONB
ELSE jsondata
END
) || '["newString"]'::JSONB WHERE id = 7;