PostgreSQL jsonデータに値を追加する

PostgreSQL jsonデータに値を追加する

PostgreSQLで、jsonデータに値を追加する手順を記述してます。「jsonb_insert」に値を指定することで可能です。「json」にならないデータや既に存在するキーを指定するとエラーとなります。

環境

  • OS CentOS Stream release 9
  • PostgreSQL 15.1
  • pgadmin4 6.16

jsonデータに値を追加

jsonデータに値を追加するには、「jsonb_insert」を使用します。

jsonb_insert(jsonデータ,追加する値);

実際に、実行してみます。

SELECT 
	jsonb_insert('{}', '{a}', '1'),
	jsonb_insert('{"a" : 1}', '{b}', '2');

実行結果をみると、追加されていることが確認できます。

「json」に使用できるデータになっていないとエラーが発生します。

SELECT 
	jsonb_insert('{}', '{a}');

ERROR:  関数jsonb_insert(unknown, unknown)は存在しません
LINE 2:  jsonb_insert('{}', '{a}');
         ^
HINT:  指定した名前と引数型に合致する関数がありません。明示的な型変換が必要かもしれません。
SQL 状態: 42883
文字: 10

実行結果

存在するキーを指定

存在するキーを追加しようとするとエラーになります。

SELECT 	
	jsonb_insert('{"a" : 1}', '{a}', '2');

ERROR:  既存のキーを置き換えることはできません
HINT:  jsonb_set関数を使ってキー値を置き換えることを試してください。
SQL 状態: 22023

位置を指定

配列データなどに位置を指定して値を追加することも可能です。

SELECT 
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 0}', '0'),
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 1}', '0'),
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 2}', '0');

実行結果

最後の引数に「true」を指定すると、指定した位置の後ろに値が挿入されます。

SELECT 
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 0}', '0', true),
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 1}', '0', true),
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 2}', '0', true);

実行結果

存在しない位置を指定してもエラーにはならずに、最後の位置に値が追加されます。

SELECT 
	jsonb_insert('{"a": 1, "b": [1, 2]}', '{b, 3}', '0');

実行結果