🦭
【PostgreSQL】関数でjsonのパラメータ中の配列を値として取得する
概要
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