

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# UDF 名の競合の回避
<a name="udf-naming-udfs"></a>

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

## 関数名の多重定義
<a name="udf-naming-overloading-function-names"></a>

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

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

## 組み込み Amazon Redshift 関数との競合の回避
<a name="udf-naming-preventing-udf-naming-conflicts"></a>

プレフィックス `f_` を使用して、すべての UDF に名前を付けることをお勧めします。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\$1catalog に存在するので、パブリックスキーマやユーザー定義のスキーマなどの別のスキーマに同じ名前の UDF を作成できます。場合によっては、スキーマ名で明示的に修飾されていない関数を呼び出すことがあります。この場合、Amazon Redshift はデフォルトで最初に pg\$1catalog スキーマを検索します。したがって、組み込み関数は、同じ名前の新しい UDF の前に実行されます。

この動作は、末尾に pg\$1catalog を配置するように検索パスを設定することによって変更できます。その場合、UDF は組み込み関数よりも優先されますが、この方法では予期しない結果が生じる可能性があります。予約されている `f_` プレフィックスを使用するなど、名前の重複を回避する方法を採用したほうがより確実です。詳細については、「[SET](r_SET.md)」と「[search\$1path](r_search_path.md)」を参照してください。