偽類型
PostgreSQL 類型系統包含一系列特殊用途的 條目,它們按照類別來說叫做偽類型。一個偽類型不能作為 欄位的數據類型,但是它可以用於聲明一個函式的參數或者結果類型。 每個可用的偽類型在一個函式不只是簡單地接受並返回某種SQL數據類型的 情況下都很有用。 以下列出了現有的偽類型:
Pseudo-Types
類型名 描述
record 標識一個函式返回一個未聲明的行類型
any 表示一個函式接受任何輸入數據類型
anyarray 表示一個函式接受任意數組數據類型
void 表示一個函式不返回數值
trigger 一個觸發器函式聲明為返回 trigger
language_handler 一個過程語言調用句柄聲明為返回 language_handler
cstring 表示一個函式接受或者返回一個空零結尾的 C 字串
internal 表示一個函式接受或者返回一種伺服器內部的數據類型
opaque An obsolete type name that formerly served all the above purposes
C 編寫的函式(不管是內置的還是動態裝載的)都可以聲明為接受或者返回 這樣的偽數據類型。在把偽類型用做函式參數類型的時候,保證函式行為正常 就是函式作者的任務了。
用過程語言編寫的函式只能根據它們的實現語言是否可以使用偽類型而使用它。目前,過程語言都不允許使用偽類型作為參數類型,並且只允許使用 void 作為結果類型(如果函式用做觸發器,那么加上 trigger)。
偽類型 internal 用於聲明那種只能在資料庫系統內部調用的函式, 它們不能直接在SQL查詢里調用。如果函式至少有一個 internal 類型 的參數,那么我們就不能從SQL里調用它。為了保留這個限制的類型安全, 我們一定要遵循這樣的編碼規則:不要創建任何聲明為返回 internal 的函式,除非它至少有一個 internal 參數。