🦭

【PostgreSQL】関数でjsonのパラメータ中の配列を値として取得する

2024/01/28に公開

概要

PostgreSQLの関数では、引数にjsonを指定できます。jsonから配列項目の値を取得する際のやり方が、少し複雑だったので今回メモ書きします。

実装方針

  • PostgreSQL15の9.16. JSON関数と演算子のドキュメントを元に、値を取得していきます。まずは演算子#>を使用して配列が入ってる項目を指定します。その後jsonb_array_elementsを使用して値を想定している型にcastしつつ、行レコードの集合とします。
  • このままだと行データになるので、これを配列値に変換したいと思います。Postgresqlで行と配列と文字列の相互変換の記事を参考に、array関数を使用することで行データを配列値に変換します。

実装サンプル

CREATE OR REPLACE function sample_json_array_func(numbers jsonb) RETURNS TABLE(
	number_value int[]
)
LANGUAGE plpgsql
AS $BODY$
declare
  returnResult int[] := array(select jsonb_array_elements(numbers #> '{number_values}')::int);
begin
  return query select returnResult;
end;
$BODY$

select * from sample_json_array_func('{"number_values": [1, 2, 3]}')のような形式で実行すると、配列値が{1,2,3}の形式で返ってきます。

その他参考

How to convert json array into Postgres int array
PostgreSQLのjson/jsonb型

Discussion