| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 8. 數據類型 | Fast Forward | Next |
PostgreSQL 類型系統包含一系列特殊用途的 條目,它們按照類別來說叫做 偽類型。一個偽類型不能作為 字段的數據類型,但是它可以用于聲明一個函數的參數或者結果類型。 每個可用的偽類型在一個函數不只是簡單地接受並返回某種SQL數據類型的 情況下都很有用。 Table 8-20列出了現有的偽類型。
Table 8-20. 偽類型
| 名字 | 描述 |
|---|---|
| any | 表示一個函數接受任何輸入數據類型 |
| anyarray | 表示一個函數接受任意數組數據類型(參閱 Section 33.2.5) |
| anyelement | 標識一個函數接受任何數據類型(參閱 Section 33.2.5)。 |
| cstring | 表明一個函數接受或者返回一個空結尾的 C 字串 |
| internal | 表示一個函數接受或者返回一種服務器內部的數據類型 |
| language_handler | 一個過程語言調用句柄聲明為返回 language_handler |
| void | 表示一個函數不返回數值 |
| record | 標識一個函數返回一個未聲明的行類型 |
| trigger | 一個觸發器函數聲明為返回 trigger |
| opaque | 一個已經過時的類型,以前用于所有上面這些用途 |
用 C 編寫的函數(不管是內置的還是動態裝載的)都可以聲明為接受或者返回 這樣的偽數據類型。在把偽類型用做函數參數類型的時候,保證函數行為正常 就是函數作者的任務了。
用過程語言編寫的函數只能根據它們的實現語言是否可以使用偽類型而使用 它。目前,過程語言都不允許使用偽類型作為參數類型,並且只允許使用 void 和 record 作為結果類型(如果函數用做觸發器,那麼加上 trigger)。 一些多態的函數還支持使用 anyarray 和anyelement類型。
偽類型 internal 用于聲明那種只能在數據庫系統內部調用的函數, 它們不能直接在SQL查詢裡調用。如果函數至少有一個 internal 類型 的參數,那麼我們就不能從SQL裡調用它。為了保留這個限制的類型安全, 我們一定要遵循這樣的編碼規則:不要創建任何聲明為返回 internal 的函數,除非它至少有一個 internal 參數。