41.8. pg_cast

pg_cast 資料表儲存資料類型轉換路徑, 包括內置路徑和那些透過 CREATE CAST 定義的。

Table 41-8. pg_cast 字串

名字類型引用描述
castsourceoidpg_type.oid源資料類型的 OID
casttargetoidpg_type.oid目標資料類型的OID
castfuncoidpg_proc.oid 用於執行這個轉換的函數的 OID。如果該資料類型是 二進制兼容的,那麼為零(也就是說,不需要執行時的操作來執行 轉換)。
castcontextchar  標識這個轉換可以在什麼環境裡調用。 e 資料表示只能進行明確的轉換(使用 CAST 或者 ::)。 a 資料表示在賦值給目標字串的時候隱含調用, 也可以明確調用。 i 資料表示在資料表達式中隱含,當然也包括其他情況。

pg_cast 裡列出的類型轉換函數必須總是以類型轉換的源類型作為它的第一個參數類型, 並且返回類型轉換的目的類型作為它的結果類型。一個類型轉換函數最多有三個參數。 如果出現了第二個參數,必須是 integer 類型;它接受與目標類型關聯的修飾詞, 如果沒有,就是 -1。如果出現了第三個參數,那麼必須是 boolean 類型; 如果該類型轉換是一種明確的轉換,那麼它接受 true,否則接受 false

pg_cast 裡建立一條源類型和目標類型相同的記錄是合理的, 只要相關聯的函數接受多過一個參數。這樣的記錄代資料表"長度轉換函數", 他們把該類型的數值轉換為對特定的類型修飾詞數值合法的值。 不過,請注意,現在還不支援將非預設類型修飾詞和用戶建立資料類型關聯起來, 因此這個設施只用於少量的內置類型,這些類型都有內置於語法分析器裡的類型修飾詞語法。

如果一條 pg_cast 的記錄有著不同的原類型和目標類型, 並且有一個接收多於一個參數的函數,那麼它就意味著用一個步驟從一種類型轉換到另外一種類型, 同時還附加一個長度轉換。如果沒有這樣的記錄,那麼轉換成一個使用了類型修飾詞的類型涉及兩個步驟, 一個是在資料類型之間轉換,另外一個是附加修飾詞。