?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
pg_cast表存儲數(shù)據(jù)類型轉(zhuǎn)換路徑,包括內(nèi)置路徑和那些通過CREATE CAST定義的路徑。
應(yīng)當(dāng)指出,pg_cast并不代表 系統(tǒng)知道如何執(zhí)行的每一個類型轉(zhuǎn)換,只有那些 不能從一些通用規(guī)則推導(dǎo)出的。例如, 在域和它的基類型之間轉(zhuǎn)化沒有明確表示在pg_cast。另一個重要例外是"自動I/O轉(zhuǎn)換"。 執(zhí)行使用數(shù)據(jù)類型的I/O函數(shù)到轉(zhuǎn)換到text或其它字符串類型, 沒有明確表示在pg_cast。
Table 45-10. pg_cast Columns
名稱 | 類型 | 引用 | 描述 |
---|---|---|---|
castsource | oid | pg_type.oid | 源數(shù)據(jù)類型的OID |
casttarget | oid | pg_type.oid | 目標(biāo)數(shù)據(jù)類型的OID |
castfunc | oid | pg_proc.oid | 用于執(zhí)行這個轉(zhuǎn)換的函數(shù)的OID。如果這個轉(zhuǎn)換方法不需要函數(shù),那么為零 |
castcontext | char | ? | 標(biāo)識這個轉(zhuǎn)換可以在什么環(huán)境里調(diào)用。e表示只能進行明確的轉(zhuǎn)換(使用CAST或::語法)。 a表示在賦值給目標(biāo)字段的時候隱含調(diào)用,也可以明確調(diào)用。i表示在表達式中隱含,當(dāng)然也包括其它情況。 |
castmethod | char | ? | 說明轉(zhuǎn)換是怎么運行的。 f意味著在castfunc字段中應(yīng)用的規(guī)定函數(shù)。 i意味著輸入輸出函數(shù)被應(yīng)用。 b 意味著類型是二進制的 因此不要求轉(zhuǎn)換。 |
在pg_cast里列出的類型轉(zhuǎn)換函數(shù)必須總是以類型轉(zhuǎn)換的源類型作為它的第一個參數(shù)類型, 并且返回類型轉(zhuǎn)換的目的類型作為它的結(jié)果類型。一個類型轉(zhuǎn)換函數(shù)最多有三個參數(shù)。 如果出現(xiàn)了第二個參數(shù),必須是integer類型;它接受與目標(biāo)類型關(guān)聯(lián)的修飾詞,如果沒有,就是-1。 如果出現(xiàn)了第三個參數(shù),那么必須是boolean類型;如果該類型轉(zhuǎn)換是一種明確的轉(zhuǎn)換, 那么它接受true,否則接受false。
在pg_cast里創(chuàng)建一條源類型和目標(biāo)類型相同的記錄是合理的, 只要相關(guān)聯(lián)的函數(shù)接受多過一個參數(shù)。這樣的記錄代表"長度轉(zhuǎn)換函數(shù)", 他們把該類型的數(shù)值轉(zhuǎn)換為對特定的類型修飾詞數(shù)值合法的值。
如果一條pg_cast記錄有著不同的原類型和目標(biāo)類型,并且有一個接收多于一個參數(shù)的函數(shù), 那么它就意味著用一個步驟從一種類型轉(zhuǎn)換到另外一種類型,同時還附加一個長度轉(zhuǎn)換。 如果沒有這樣的記錄,那么轉(zhuǎn)換成一個使用了類型修飾詞的類型涉及兩個步驟, 一個是在數(shù)據(jù)類型之間轉(zhuǎn)換,另外一個是附加修飾詞。