8.13. 偽類型

PostgreSQL 類型系統包含一系列特殊用途的 條目,它們按照類別來說叫做 偽類型。一個偽類型不能作為 字串的資料類型,但是它可以用於聲明一個函數的參數或者結果類型。 每個可用的偽類型在一個函數不只是簡單地接受並返回某種SQL資料類型的 情況下都很有用。 Table 8-20列出了現有的偽類型。

Table 8-20. 偽類型

名字描述
any資料表示一個函數接受任何輸入資料類型
anyarray資料表示一個函數接受任意數組資料類型(參閱 Section 31.2.5
anyelement標識一個函數接受任何資料類型(參閱 Section 31.2.5)。
cstring資料表明一個函數接受或者返回一個空結尾的 C 字串
internal資料表示一個函數接受或者返回一種伺服器內部的資料類型
language_handler一個過程語言調用句柄聲明為返回 language_handler
void資料表示一個函數不返回數值
record標識一個函數返回一個未聲明的行類型
trigger一個觸發器函數聲明為返回 trigger
opaque一個已經過時的類型,以前用於所有上面這些用途

用 C 編寫的函數(不管是內置的還是動態裝載的)都可以聲明為接受或者返回 這樣的偽資料類型。在把偽類型用做函數參數類型的時候,保證函數行為正常 就是函數作者的任務了。

用過程語言編寫的函數只能根據它們的實現語言是否可以使用偽類型而使用 它。目前,過程語言都不允許使用偽類型作為參數類型,並且只允許使用 voidrecord 作為結果類型(如果函數用做觸發器,那麼加上 trigger)。 一些多態的函數還支援使用 anyarrayanyelement類型。

偽類型 internal 用於聲明那種只能在資料庫系統內部調用的函數, 它們不能直接在SQL查詢裡調用。如果函數至少有一個 internal 類型 的參數,那麼我們就不能從SQL裡調用它。為了保留這個限制的類型安全, 我們一定要遵循這樣的編碼規則:不要建立任何聲明為返回 internal 的函數,除非它至少有一個 internal 參數。