支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3

8.21. 虛擬類型 #

PostgreSQL 類型系統包含許多特殊用途的條目,統稱為虛擬類型。虛擬類型不能用作欄位資料類型,但可以用於宣告函式的引數或結果類型。每個可用的虛擬類型在以下情況下都很有用:函式的行為並不對應於簡單地取得或傳回特定SQL資料類型。表 8.27 列出了現有的虛擬類型。

表 8.27. 虛擬類型

名稱 描述
any 表示函式接受任何輸入資料類型。
anyelement 表示函式接受任何資料類型(請參閱第 36.2.5 節)。
anyarray 表示函式接受任何陣列資料類型(請參閱第 36.2.5 節)。
anynonarray 表示函式接受任何非陣列資料類型(請參閱第 36.2.5 節)。
anyenum 表示函式接受任何列舉資料類型(請參閱第 36.2.5 節第 8.7 節)。
anyrange 表示函式接受任何範圍資料類型(請參閱第 36.2.5 節第 8.17 節)。
anymultirange 表示函式接受任何多重範圍資料類型(請參閱第 36.2.5 節第 8.17 節)。
anycompatible 表示函式接受任何資料類型,並自動將多個引數提升為通用資料類型(請參閱第 36.2.5 節)。
anycompatiblearray 表示函式接受任何陣列資料類型,並自動將多個引數提升為通用資料類型(請參閱第 36.2.5 節)。
anycompatiblenonarray 表示函式接受任何非陣列資料類型,並自動將多個引數提升為通用資料類型(請參閱第 36.2.5 節)。
anycompatiblerange 表示函式接受任何範圍資料類型,並自動將多個引數提升為通用資料類型(請參閱第 36.2.5 節第 8.17 節)。
anycompatiblemultirange 表示函式接受任何多重範圍資料類型,並自動將多個引數提升為通用資料類型(請參閱第 36.2.5 節第 8.17 節)。
cstring 表示函式接受或傳回以 null 結尾的 C 字串。
internal 表示函式接受或傳回伺服器內部資料類型。
language_handler 程序語言呼叫處理常式宣告為傳回 language_handler
fdw_handler 外部資料包裝函式處理常式宣告為傳回 fdw_handler
table_am_handler 表格存取方法處理常式宣告為傳回 table_am_handler
index_am_handler 索引存取方法處理常式宣告為傳回 index_am_handler
tsm_handler tablesample 方法處理常式宣告為傳回 tsm_handler
record 識別接受或傳回未指定列類型的函式。
trigger 觸發程序函式宣告為傳回 trigger
event_trigger 事件觸發程序函式宣告為傳回 event_trigger
pg_ddl_command 識別可供事件觸發程序使用的 DDL 命令的表示法。
void 表示函式不傳回值。
unknown 識別尚未解析的類型,例如未裝飾字串常值。

以 C 語言編寫的函式(無論是內建的還是動態載入的)可以宣告為接受或傳回任何這些虛擬類型。函式作者有責任確保在使用虛擬類型作為引數類型時,函式的行為是安全的。

以程序語言編寫的函式只能在其所實作的語言允許的情況下使用虛擬類型。目前,大多數程序語言禁止使用虛擬類型作為引數類型,並且僅允許 voidrecord 作為結果類型(以及當函式用作觸發程序或事件觸發程序時的 triggerevent_trigger)。有些也支援使用多型虛擬類型的多型函式,這些多型虛擬類型如上所示,並在第 36.2.5 節中詳細討論。

internal 虛擬類型用於宣告僅供資料庫系統內部呼叫的函式,而不是在SQL查詢中直接呼叫。如果函式至少有一個 internal 類型引數,則無法從SQL為了保持此限制的型別安全,遵循以下程式碼規則非常重要:除非函數至少有一個 internal 參數,否則請勿建立任何宣告為返回 internal 的函數。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符,或需要進一步澄清的內容,請使用此表單回報文件問題。