PostgreSQL pg_type

2021-09-14 14:27 更新

目錄pg_type存儲(chǔ)有關(guān)數(shù)據(jù)類型的信息?;惡兔杜e類型(標(biāo)度類型)使用CREATE TYPE創(chuàng)建,而域使用 CREATE DOMAIN 創(chuàng)建。數(shù)據(jù)庫中的每一個(gè)表都會(huì)有一個(gè)自動(dòng)創(chuàng)建的組合類型,用于表示表的行結(jié)構(gòu)。也可以使用CREATE TYPE AS創(chuàng)建組合類型。

表 51.62. pg_type Columns

列類型

描述

oid oid

行標(biāo)識(shí)符

typname name

數(shù)據(jù)類型的名字

typnamespace oid (references pg_namespace.oid)

包含此類型的名字空間的OID

typowner oid (references pg_authid.oid)

類型的擁有者

typlen int2

對(duì)于一個(gè)固定尺寸的類型,typlen是該類型內(nèi)部表示的字節(jié)數(shù)。 對(duì)于一個(gè)變長(zhǎng)類型,typlen為負(fù)值。 -1表示一個(gè)varlena類型(具有長(zhǎng)度字),-2表示一個(gè)以空值結(jié)尾的C字符串。

typbyval bool

typbyval判斷內(nèi)部例程傳遞這個(gè)類型的數(shù)值時(shí)是通過傳值還是傳引用。 如果typlen不是1、2或4(或者在Datum為8字節(jié)的機(jī)器上為8),因此typbyval最好是假。 變長(zhǎng)類型總是傳引用。注意即使長(zhǎng)度允許傳值, typbyval也可以為假。

typtype char

typtype可以是: b表示一個(gè)基類, c表示一個(gè)組合類型(例如一個(gè)表的行類型), d表示一個(gè)域, e表示一個(gè)枚舉類型, p表示一個(gè)偽類型,或 r表示一個(gè)范圍類型。 另請(qǐng)參閱typrelidtypbasetype.

typcategory char

typcategory是一種任意的數(shù)據(jù)類型分類,它被分析器用來決定哪種隱式轉(zhuǎn)換更好。參見本文表 51.63。

typispreferred bool

如果此類型在它的typcategory中是一個(gè)更好的轉(zhuǎn)換目標(biāo),此列為真

typisdefined bool

如果此類型已被定義則為真,如果此類型只是一個(gè)表示還未定義類型的占位符則為假。 當(dāng)typisdefined為假,除了類型名字、名字空間和OID之外什么都不能被依賴。

typdelim char

在分析數(shù)組輸入時(shí),分隔兩個(gè)此類型值的字符。注意該分隔符是與數(shù)組元素?cái)?shù)據(jù)類型相關(guān)聯(lián)的, 而不是和數(shù)組的數(shù)據(jù)類型關(guān)聯(lián)。

typrelid oid (references pg_class.oid)

如果這是一個(gè)復(fù)合類型(見typtype), 那么這個(gè)列指向pg_class中定義對(duì)應(yīng)表的項(xiàng) (對(duì)于自由存在的復(fù)合類型,pg_class項(xiàng)并不表示一個(gè)表,但不管怎樣該類型的pg_attribute項(xiàng)需要鏈接到它)。對(duì)非復(fù)合類型此列為零。

typelem oid (參考 pg_type.oid)

如果typelem不為0,則它標(biāo)識(shí)pg_type里面的另外一行。 當(dāng)前類型可以被加上下標(biāo)得到一個(gè)值為類型typelem的數(shù)組來描述。 一個(gè)真的數(shù)組類型是變長(zhǎng)的(typlen = -1),但是一些定長(zhǎng)的(typlen > 0)類型也擁有非零的typelem,比如namepoint。 如果一個(gè)定長(zhǎng)類型擁有一個(gè)typelem, 則它的內(nèi)部形式必須是某個(gè)typelem數(shù)據(jù)類型的值,不能有其它數(shù)據(jù)。變長(zhǎng)數(shù)組類型有一個(gè)由該數(shù)組子例程定義的頭。

typarray oid (參考 pg_type.oid)

如果typarray不是0,則它標(biāo)識(shí)pg_type中的另一行,這一行是一個(gè)將此類型作為元素的真的數(shù)組類型

typinput regproc (references pg_proc.oid)

輸入轉(zhuǎn)換函數(shù)(文本格式)

typoutput regproc (references pg_proc.oid)

輸出轉(zhuǎn)換函數(shù)(文本格式)

typreceive regproc (references pg_proc.oid)

輸入轉(zhuǎn)換函數(shù)(二進(jìn)制格式),如果沒有則為0

typsend regproc (參考 pg_proc.oid)

輸出轉(zhuǎn)換函數(shù)(二進(jìn)制格式),如果沒有則為0

typmodin regproc (參考 pg_proc.oid)

類型修改器輸入函數(shù),如果類型沒有提供修改器則為0

typmodout regproc (參考 pg_proc.oid)

類型修改器輸出函數(shù),或?yàn)?以使用標(biāo)準(zhǔn)格式

typanalyze regproc (參考 pg_proc.oid)

自定義ANALYZE函數(shù),0表示使用標(biāo)準(zhǔn)函數(shù)

typalign char

typalign是當(dāng)存儲(chǔ)此類型值時(shí)要求的對(duì)齊性質(zhì)。 它應(yīng)用于磁盤存儲(chǔ)以及該值在 PostgreSQL內(nèi)部的大多數(shù)表現(xiàn)形式。 如果數(shù)值是連續(xù)存放的,比如在磁盤上的一個(gè)完整行,在這種類型的數(shù)據(jù)前會(huì)插入填充,這樣它就可以按照指定邊界存儲(chǔ)。 對(duì)齊引用是該序列中第一個(gè)數(shù)據(jù)的開頭。對(duì)齊引用是序列中第一個(gè)數(shù)據(jù)的開始。 可能的值為:

  • c = char對(duì)齊,即不需要對(duì)齊。

  • s = short對(duì)齊(在大部分機(jī)器上為2字節(jié))。

  • i = int對(duì)齊(在大部分機(jī)器上為4字節(jié))。

  • d = double對(duì)齊(在很多機(jī)器上為8字節(jié),但絕不是全部)。

typstorage char

如果一個(gè)變長(zhǎng)類型(typlen = -1)可被TOAST,typstorage說明這種類型的列應(yīng)采取的默認(rèn)策略。 可能的值是:

  • p (普通的): 值必須始終以普通方式存儲(chǔ)(非varlena類型總是使用這個(gè)值)。

  • e (外部的): 值可以存儲(chǔ)在一個(gè)次要 TOAST關(guān)系中 (如果有一個(gè)關(guān)系, 參見pg_class.reltoastrelid).

  • m (主要的): 值可以被壓縮并內(nèi)聯(lián)存儲(chǔ)。

  • x (擴(kuò)展的): 值可以被壓縮和/或移動(dòng)到次要關(guān)系。

x toast-able 類型的常用選項(xiàng)。 注意m值也可以被移動(dòng)到二級(jí)存儲(chǔ),但只能是作為最后一種方案(ex值會(huì)先被移動(dòng))。

typnotnull bool

typnotnull表示類型上的一個(gè)非空約束。只用于域。

typbasetype oid (references pg_type.oid)

如果這是一個(gè)域(見typtype),則typbasetype標(biāo)識(shí)這個(gè)域基于的類。如果此類不是一個(gè)域則為0。

typtypmod int4

域使用typtypmod來記錄被應(yīng)用于它們基類型的typmod(如果基類型不使用typmod,則為-1)。如果此類型不是一個(gè)域則為-1。

typndims int4

對(duì)于一個(gè)數(shù)組上的域,typndims是數(shù)組維度數(shù)(即,typbasetype是一個(gè)數(shù)組類型)。除數(shù)組類型上的域之外的類型的此列為0。

typcollation oid (references pg_collation.oid)

typcollation指定此類型的排序規(guī)則。如果類型不支持排序規(guī)則,此列為0。 一個(gè)支持排序規(guī)則的基類型此處會(huì)有一個(gè)非零值,典型值為DEFAULT_COLLATION_OID。 可排序類型上的域可以有一個(gè)不同于其基類型的排序規(guī)則OID,如果為該域指定了一個(gè)排序規(guī)則OID的話。

typdefaultbin pg_node_tree

如果typdefaultbin為非空,那么它是 該類型默認(rèn)表達(dá)式的nodeToString()表現(xiàn)形式。這個(gè)列只用于域。

typdefault text

如果某類型沒有相關(guān)默認(rèn)值,那么typdefault為空。如果typdefaultbin不為空, 那么typdefault必須包含一個(gè)typdefaultbin所指的默認(rèn)表達(dá)式的人類可讀的版本。 如果typdefaultbin為空但 typdefault不為空,則typdefault是該類型默認(rèn)值的外部表現(xiàn)形式, 它可以被交給該類型的輸入轉(zhuǎn)換器來產(chǎn)生一個(gè)常量。

typacl aclitem[]

訪問權(quán)限,另請(qǐng)參閱第 5.7 節(jié)


注意

對(duì)于系統(tǒng)表中使用的固定寬度類型,關(guān)鍵的是在pg_type定義的大小和對(duì)齊與編譯器在表示表行的結(jié)構(gòu)中布局列的方式一致。

表 51.63列出了typcategory的系統(tǒng)定義值。任何未來對(duì)此列表的增加都將是大寫ASCII字母。所有其他ASCII字符都保留給用戶定義的類別。

表 51.63. typcategory Codes

編碼 類別
A 數(shù)組類型
B 布爾類型
C 組合類型
D 日期/時(shí)間類型
E 枚舉類型
G 幾何類型
I 網(wǎng)絡(luò)地址類型
N 數(shù)字類型
P 偽類型
R 范圍類型
S 字符串類型
T 時(shí)間間隔類型
U 用戶定義類型
V 位字符串類型
X 未知 type


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)