メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012年12月1日)

UDF の命名

UDF を実装する前に UDF の命名規則を考慮することにより、競合を防止したり、予期せぬ結果を回避したりできます。関数名は多重定義が可能であるため、現在使用されている、および将来使用される Amazon Redshift 関数名と重複する可能性があります。このトピックでは、多重定義について説明し、競合を回避する方法を示します。

関数名の多重定義

関数は、その名前と、入力引数の数および引数のデータ型で構成される署名によって識別されます。同じスキーマ内に名前は同じで署名は異なる 2 つの関数が存在できます。つまり、関数名は多重定義が可能です。

クエリを実行するとき、クエリエンジンは、指定されている引数の数と引数のデータ型に基づいて、呼び出す関数を決定します。多重定義を使用すると、CREATE FUNCTION コマンドで許可されている制限まで、可変数の引数を使用して関数をシミュレートできます。

UDF 名の競合の回避

すべての UDF 名にプレフィックスとして f_ を使用することを推奨します。Amazon Redshift は、UDF 専用のプレフィックスとして f_ を予約しており、UDF 名にプレフィックスとして f_ を使用することで、UDF 名が現在使用されている、または将来使用される Amazon Redshift 組み込み SQL 関数名と競合することを回避できます。たとえば、新しい UDF に f_sum という名前を付けることで、Amazon Redshift SUM 関数との競合を回避できます。同様に、新しい関数に f_fibonacci という名前を付けると、Amazon Redshift の将来のリリースで FIBONACCI という名前の関数が追加された場合に競合を回避できます。

既存の Amazon Redshift 組み込み SQL 関数が異なるスキーマに存在する場合に限り、関数名の多重定義を発生させることなく、同じ名前および署名の UDF を作成できます。組み込み関数はシステムカタログスキーマである pg_catalog に存在するので、パブリックスキーマやユーザー定義のスキーマなどの別のスキーマに同じ名前の UDF を作成できます。スキーマ名で明示的に修飾されていない関数を呼び出すと、Amazon Redshift はデフォルトでまず pg_catalog を検索します。これにより、組み込み関数が同じ名前の新しい UDF よりも先に実行されます。

この動作は、末尾に pg_catalog を配置するように検索パスを設定することによって変更できます。これにより、UDF が組み込み関数よりも優先されます。ただし、この方法では予期せぬ結果が発生する可能性があります。予約されている f_ プレフィックスを使用するなど、名前の重複を回避する方法を採用したほうがより確実です。詳細については、「SET」および「search_path」を参照してください。