命名 UDF - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

命名 UDF

您可以在實作之前考慮 UDF 命名慣例,來避免產生潛在的衝突和非預期的結果。因為函數名稱可以過載,所以它們可能與現有和未來的 Amazon Redshift 函數名稱發生衝突。本主題討論過載,並說明避免衝突的策略。

多載函數名稱

函數是以其名稱和簽章來識別,而簽章是輸入引數的數目和引數的資料類型。如果相同結構描述中的兩個函數具有不同的簽章,則它們可以具有相同的名稱。換言之,函數名稱可以過載

當您執行查詢時,查詢引擎會根據您提供的引數數目和引數的資料類型來決定要呼叫哪個函數。您可以使用過載來模擬具有可變引數數目的函數,而此數目最多可為 CREATE FUNCTION 命令允許的限制。

防止 UDF 命名衝突

我們建議您在所有 UDF 名稱前加上 f_。Amazon Redshift 建議您使用字首 f_ 來命名所有 UDF,藉由以 f_ 做為 UDF 名稱的字首,您可以確保 UDF 名稱不會與任何現有或未來的 Amazon Redshift 內建 SQL 函數名稱發生衝突。例如,藉由將新的 UDF 命名為 f_sum,您可以避免與 Amazon Redshift SUM 函數發生衝突。同樣地,如果您將新函數命名為 f_fibonacci,則可在 Amazon Redshift 於未來版本中新增名為 FIBONACCI 的函數時避免發生衝突。

如果 UDF 和內建函數存在於不同的結構描述中,則您可以使用與現有 Amazon Redshift 內建 SQL 函數相同的名稱和簽章來建立 UDF,而函數名稱不會過載。因為內建函數存在於系統目錄結構描述 (pg_catalog) 中,所以您可以在另一個結構描述 (例如公有或使用者定義的結構描述) 中建立名稱相同的 UDF。在某些情況下,您可能會呼叫未使用結構描述名稱明確限定的函數。如果是這樣,Amazon Redshift 預設會先搜尋 pg_catalog 結構描述。因此,內建函數會在具有相同名稱的新 UDF 之前執行。

您可以透過將搜尋路徑設定為將 pg_catalog 放在末尾來變更此行為。如果您這樣做,您的 UDF 會優先於內建函數,但這種做法可能會導致非預期的結果。採用唯一命名策略 (例如使用保留字首 f_) 是更為可靠的實務。如需詳細資訊,請參閱 SETsearch_path