このガイドでは、VARIADIC
型に焦点を当て、最適化戦略を提供しながら、単一のパラメーターを使用して複数の値を PostgreSQL 関数に効率的に渡す方法を説明します。
VARIADIC
パラメータの利用PostgreSQL の VARIADIC
タイプは、単一のパラメーター内で複数の入力値を処理するための簡潔なソリューションを提供します。 サンプル関数を適応させてみましょう:
<code class="language-sql">CREATE OR REPLACE FUNCTION test(VARIADIC int[]) RETURNS TABLE (job_id int, job_reference int, job_job_title text, job_status text) AS $$ BEGIN RETURN QUERY SELECT j.id, j.reference, j.job_title, ltrim(right(j.status, -2)) AS status -- Optimized string trimming FROM jobs j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{<b>-1</b>}'::int[] = ) ORDER BY j.job_title; END; $$ LANGUAGE plpgsql;</code>
この改訂された関数は、入力として整数配列 (int[]
) を受け入れます。 VARIADIC
キーワードを使用すると、関数が可変数の整数引数を受け入れ、それらを自動的に配列に変換できるようになります。
VARIADIC
関数は配列を使用して直接呼び出すことができます:
<code class="language-sql">SELECT * FROM test(<b>VARIADIC</b> '{1, 2, 3}'::int[]);</code>
これは機能的に以下と同等です:
<code class="language-sql">SELECT * FROM test(1, 2, 3);</code>
効率的な文字列トリミング: PostgreSQL 9.1 以降では、right()
を負の長さ (right(j.status, -2)
) で使用すると、substring()
と比較して先頭文字を削除するための高速かつクリーンな方法が提供されます。
データ型の考慮事項: DeleteFlag
がブール値を表す場合、boolean
データ型を使用する方が、text
よりも効率的で意味的に正しいです。 WHERE
句では、列名の前後に不要な二重引用符を付けないでください。
可読性の向上と潜在的なパフォーマンスの向上のために、純粋な SQL 実装を検討してください。
<code class="language-sql">CREATE OR REPLACE FUNCTION f_test(VARIADIC int[]) RETURNS TABLE (id int, reference int, job_title text, status text) AS $func$ SELECT j.id, j.reference, j.job_title , ltrim(right(j.status, -2)) AS status FROM job j JOIN company c ON j.id = c.id WHERE c.active AND NOT c.delete_flag AND NOT j.delete_flag AND (j.id = ANY() OR '{-1}'::int[] = ) ORDER BY j.job_title $func$ LANGUAGE sql;</code>
この簡略化されたバージョンでは、同じ機能がさらに簡潔になりました。 特定のスキーマに一致するようにテーブル名と列名を必ず調整してください。
以上が単一のパラメータを使用して複数の値を PostgreSQL 関数に渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。