PostgreSQL json配列から行に変換する

PostgreSQL json配列から行に変換する

PostgreSQLで、json配列から行に変換する手順を記述してます。「json_array_elements」を使用することで可能です。textデータとして取得する場合は「json_array_elements_text」を使用します。

環境

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

json配列から行に変換

json配列から行に変換するには、「json_array_elements」を使用します。
※「josnb型」には「jsonb_array_elements」を使用します。

json_array_elements(jsonデータ);

jsonb_array_elements(jsonbデータ);

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

SELECT 
json_array_elements('["aaa", 10, {"id": 10}, null]'::json),
jsonb_array_elements('["aaa", 10, {"id": 10}, null]'::jsonb);

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

型の違う「jsonb」に「json_object_keys」を使用するとエラーとなります。

SELECT 
json_array_elements('["aaa", 10, {"id": 10}, null]'::json),
jsonb_array_elements('["aaa", 10, {"id": 10}, null]'::json);

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

実行結果

空を指定

引数を空にすると、エラーが発生します。

SELECT 
json_array_elements();

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

実行結果

textデータで取得

textデータとして取得する場合は「json_array_elements_text」を使用します。

SELECT 
json_array_elements_text('["aaa", 10, {"id": 10}, null]'::json),
jsonb_array_elements_text('["aaa", 10, {"id": 10}, null]'::jsonb);

実行結果