2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 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. 偽型別 #

The PostgreSQL type system contains a number of special-purpose entries that are collectively called pseudo-types. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type. Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specificSQLdata type. 表 8.27 lists the existing pseudo-types.

表 8.27. 偽型別

名稱 描述
任意 表示函式接受任何輸入資料型別。
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 一個表取樣方法處理器被宣告為返回 tsm_handler
record 標識一個接受或返回未指定行型別的函式。
trigger 一個觸發器函式被宣告為返回 trigger
event_trigger 一個事件觸發器函式被宣告為返回 event_trigger
pg_ddl_command 標識一個可用於事件觸發器的 DDL 命令的表示。
void 表示函式不返回值。
unknown 標識一個尚未解析的型別,例如,未修飾的字串字面量。

用 C 語言編寫的函式(無論是內建還是動態載入的)都可以宣告接受或返回這些偽型別中的任何一種。函式作者有責任確保在將偽型別用作引數型別時,函式能夠安全地執行。

用過程語言編寫的函式只能在其實現語言允許的情況下使用偽型別。目前,大多數過程語言禁止將偽型別用作引數型別,並且只允許 voidrecord 作為返回型別(當函式用作觸發器或事件觸發器時,還包括 triggerevent_trigger)。一些語言還支援使用多型偽型別(如上所示,並在 第 36.2.5 節 中詳細討論)的多型函式。

偽型別 internal 用於宣告僅供資料庫系統內部呼叫的函式,而不是透過直接在查詢中呼叫。如果一個函式至少有一個 internal 型別的引數,那麼它就不能從SQL查詢中呼叫。為了保持這種限制的型別安全,遵循以下編碼規則很重要:不要建立任何宣告返回 internal 的函式,除非它至少有一個 internal 引數。SQL. To preserve the type safety of this restriction it is important to follow this coding rule: do not create any function that is declared to return internal unless it has at least one internal argument.

提交更正

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