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 語言編寫的函式(無論是內建的還是動態載入的)可以宣告為接受或傳回任何這些虛擬類型。函式作者有責任確保在使用虛擬類型作為引數類型時,函式的行為是安全的。
以程序語言編寫的函式只能在其所實作的語言允許的情況下使用虛擬類型。目前,大多數程序語言禁止使用虛擬類型作為引數類型,並且僅允許 void
和 record
作為結果類型(以及當函式用作觸發程序或事件觸發程序時的 trigger
或 event_trigger
)。有些也支援使用多型虛擬類型的多型函式,這些多型虛擬類型如上所示,並在第 36.2.5 節中詳細討論。
internal
虛擬類型用於宣告僅供資料庫系統內部呼叫的函式,而不是在SQL查詢中直接呼叫。如果函式至少有一個 internal
類型引數,則無法從SQL為了保持此限制的型別安全,遵循以下程式碼規則非常重要:除非函數至少有一個 internal
參數,否則請勿建立任何宣告為返回 internal
的函數。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符,或需要進一步澄清的內容,請使用此表單回報文件問題。