?
This document uses PHP Chinese website manual Release
PostgreSQL類型系統(tǒng)包含一系列特殊用途的條目, 它們按照類別來說叫做偽類型。偽類型不能作為字段的數(shù)據(jù)類型, 但是它可以用于聲明一個函數(shù)的參數(shù)或者結(jié)果類型。 偽類型在一個函數(shù)不只是簡單地接受并返回某種SQL數(shù)據(jù)類型的情況下很有用。 Table 8-24列出了所有的偽類型。
Table 8-24. 偽類型
名字 | 描述 |
---|---|
any | 表示一個函數(shù)接受任何輸入數(shù)據(jù)類型 |
anyarray | 表示一個函數(shù)接受任意數(shù)組數(shù)據(jù)類型 (參閱Section 35.2.5) |
anyelement | 表示一個函數(shù)接受任何數(shù)據(jù)類型 (參閱Section 35.2.5) |
anyenum | 表示一個函數(shù)接受任意枚舉數(shù)據(jù)類型 (參閱Section 35.2.5 and Section 8.7). |
anynonarray | 表示一個函數(shù)接受任意非數(shù)組數(shù)據(jù)類型 (參閱Section 35.2.5). |
cstring | 表示一個函數(shù)接受或者返回一個空結(jié)尾的C字符串 |
internal | 表示一個函數(shù)接受或者返回一種服務(wù)器內(nèi)部的數(shù)據(jù)類型 |
language_handler | 一個過程語言調(diào)用處理器聲明為返回 language_handler. |
record | 標識一個函數(shù)返回一個未聲明的行類型 |
trigger | 一個觸發(fā)器函數(shù)聲明為返回trigger. |
void | 表示一個函數(shù)不返回數(shù)值 |
opaque | 一個已經(jīng)過時的類型,以前用于所有上面這些用途 |
用C編寫的函數(shù)(不管是內(nèi)置的還是動態(tài)裝載的)都可以聲明為接受或者返回這樣的偽數(shù)據(jù)類型。 在把偽類型用做函數(shù)參數(shù)類型的時候,保證函數(shù)行為正常就是函數(shù)作者的任務(wù)了。
用過程語言編寫的函數(shù)只能根據(jù)它們的實現(xiàn)語言是否可以使用偽類型而使用它。 目前,過程語言都不允許使用偽類型作為參數(shù)類型, 并且只允許使用void和record作為結(jié)果類型 (如果函數(shù)用做觸發(fā)器,那么加上trigger)。 一些多態(tài)的函數(shù)還支持使用anyarray, anyelement,anyenum和anynonarray類型。
偽類型internal用于聲明那種只能在數(shù)據(jù)庫系統(tǒng)內(nèi)部調(diào)用的函數(shù), 它們不能直接在SQL查詢里調(diào)用。 如果函數(shù)至少有一個internal類型的參數(shù), 那么我們就不能從SQL里調(diào)用它。 為了保留這個限制的類型安全,我們一定要遵循這樣的編碼規(guī)則: 不要創(chuàng)建任何聲明為返回internal的函數(shù),除非它至少有一個internal參數(shù)。