命名 UDF - Amazon Redshift

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

命名 UDF

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

多載函數名稱

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

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

防止 UDF 命名衝突

我們建議您使用前綴命名所有 UDFf_。Amazon Redshift 保留f_前綴,並通過在 UDF 名稱前綴f_,您可以確保 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_目錄架構。因此,內置函數在具有相同名稱的新 UDF 之前運行。

您可以將搜索路徑設為在結尾放置 pg_catalog,來更改此行為。如果您執行此操作,UDF 會優先於內建函數,但實務可能產生非預期的結果。採用唯一命名策略 (例如使用保留字首 f_) 是更為可靠的實務。如需詳細資訊,請參閱 SETsearch_path