2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

52.64. pg_type #

目錄pg_type儲存有關資料型別的資訊。基本型別和列舉型別(標量型別)使用CREATE TYPE建立,域使用CREATE DOMAIN建立。每個資料庫中的表都會自動建立一個複合型別,以表示表的行結構。也可以使用CREATE TYPE AS建立複合型別。

表 52.64. pg_type

列 型別

描述

oid oid

行識別符號

typname name

資料型別名稱

typnamespace oid (引用 pg_namespace.oid

包含此型別的名稱空間 OID

typowner oid (引用 pg_authid.oid

型別的屬主

typlen int2

對於固定大小的型別,typlen是型別內部表示中的位元組數。但對於可變長度的型別,typlen為負。-1表示varlena型別(帶有長度字的型別),-2表示以null結尾的C字串。

typbyval bool

typbyval決定內部例程是按值傳遞還是按引用傳遞此型別的。如果typlen不是1、2或4(或在Datum為8位元組的機器上為8),則typbyval最好為false。可變長度型別始終按引用傳遞。請注意,即使長度允許按值傳遞,typbyval也可以為false。

typtype char

typtype對於基本型別為b,對於複合型別(例如錶行型別)為c,對於域為d,對於列舉型別為e,對於偽型別為p,對於範圍型別為r,或者對於多範圍型別為m。另請參閱typrelidtypbasetype

typcategory char

typcategory是資料型別的一個任意分類,解析器使用它來確定哪些隱式轉換應該是首選。請參閱表 52.65

typispreferred bool

如果該型別在其typcategory中是首選的轉換目標,則為True

typisdefined bool

如果型別已定義,則為True,如果這是尚未定義的型別的佔位符條目,則為False。當typisdefined為False時,除了型別名稱、名稱空間和OID之外,其他任何內容都不可信。

typdelim char

在解析陣列輸入時分隔此型別兩個值的字元。請注意,分隔符與陣列元素資料型別關聯,而不是與陣列資料型別關聯。

typrelid oid (引用 pg_class.oid

如果這是一個複合型別(請參閱typtype),則此列指向定義相應表的pg_class條目。(對於獨立的複合型別,pg_class條目並不真正代表表,但對於型別的pg_attribute條目需要它來連結。)對於非複合型別,為零。

typsubscript regproc (引用 pg_proc.oid

下標處理函式 OID,如果此型別不支援下標,則為零。型別為true陣列型別時,typsubscript = array_subscript_handler,但其他型別可能有其他處理函式來實現專門的下標行為。

typelem oid (引用 pg_type.oid

如果typelem不為零,則它標識pg_type中的另一個行,該行定義了下標產生的型別。如果typsubscript為零,則此項應為零。但是,如果typsubscript不為零,但typelem可以為零,如果處理程式不需要typelem來確定下標結果型別。請注意,typelem依賴性被認為是暗示該型別物理包含元素型別;因此,元素型別的DDL更改可能會受到此型別存在的限制。

typarray oid (引用 pg_type.oid

如果typarray不為零,則它標識pg_type中的另一個行,該行是具有此型別作為元素的true陣列型別

typinput regproc (引用 pg_proc.oid

輸入轉換函式(文字格式)

typoutput regproc (引用 pg_proc.oid

輸出轉換函式(文字格式)

typreceive regproc (引用 pg_proc.oid

輸入轉換函式(二進位制格式),或零(無)

typsend regproc (引用 pg_proc.oid

輸出轉換函式(二進位制格式),或零(無)

typmodin regproc (引用 pg_proc.oid

型別修飾符輸入函式,或零(型別不支援修飾符)

typmodout regproc (引用 pg_proc.oid

型別修飾符輸出函式,或零(使用標準格式)

typanalyze regproc (引用 pg_proc.oid

自定義ANALYZE函式,或零(使用標準函式)

typalign char

typalign是儲存此型別值時所需的對齊方式。它適用於磁碟儲存以及PostgreSQL內部的大多數值表示。當多個值連續儲存時,例如在磁碟上表示整個行時,會在此型別的項之前插入填充,使其從指定的邊界開始。對齊參考是序列中第一個項的開始。可能的值為

  • c = char 對齊,即無需對齊。

  • s = short 對齊(大多數機器上為2位元組)。

  • i = int 對齊(大多數機器上為4位元組)。

  • d = double 對齊(許多機器上為8位元組,但並非所有機器都如此)。

typstorage char

typstorage告知可變長度型別(typlen = -1 的型別)是否已準備好進行TOAST處理,以及此型別的屬性的預設策略應是什麼。可能的值為

  • p (plain):值必須始終儲存為普通(非可變長度型別始終使用此值)。

  • e (external):值可以儲存在次要TOAST關係中(如果關係有,請參閱pg_class.reltoastrelid)。

  • m (main):值可以壓縮並內聯儲存。

  • x (extended):值可以壓縮和/或移至次要關係。

x是可TOAST型別常用的選擇。請注意,m值也可以移出到次要儲存,但僅作為最後手段(ex值首先被移動)。

typnotnull bool

typnotnull表示型別的非空約束。僅用於域。

typbasetype oid (引用 pg_type.oid

如果這是一個域(請參閱typtype),則typbasetype標識它基於的型別。如果此型別不是域,則為零。

typtypmod int4

域使用typtypmod來記錄要應用於其基本型別的typmod(如果基本型別不使用typmod,則為-1)。如果此型別不是域,則為-1。

typndims int4

如果域是陣列之上(即typbasetype是陣列型別),則typndims是陣列的維度數。對於非陣列域型別的型別,則為零。

typcollation oid (引用 pg_collation.oid

typcollation指定型別的排序規則。如果型別不支援排序規則,則此值將為零。支援排序規則的基本型別在此處具有非零值,通常為DEFAULT_COLLATION_OID。如果為域指定了排序規則,則基於可排序型別域的排序規則 OID 可能與其基本型別的不同。

typdefaultbin pg_node_tree

如果typdefaultbin不為null,則它是型別預設表示式的nodeToString()表示。這僅用於域。

typdefault text

如果型別沒有關聯的預設值,則typdefault為null。如果typdefaultbin不為null,則typdefault必須包含typdefaultbin表示的預設表示式的可讀版本。如果typdefaultbin為null且typdefault不為null,則typdefault是型別預設值的外部表示,可以將其饋送到型別的輸入轉換器以生成常量。

typacl aclitem[]

訪問許可權;有關詳細資訊,請參閱 第 5.8 節


注意

對於在系統表中使用的固定寬度型別,pg_type中定義的寬度和對齊方式必須與編譯器在表示錶行的結構中佈局列的方式一致,這一點至關重要。

表 52.65列出了typcategory的系統定義值。此列表的任何未來新增也將是大寫ASCII字母。所有其他ASCII字元都保留給使用者定義的類別。

表 52.65. typcategory 程式碼

程式碼 類別
一個 陣列型別
B 布林型別
C 複合型別
D 日期/時間型別
E 列舉型別
G 幾何型別
I 網路地址型別
N 數值型別
P 偽型別
R 範圍型別
S 字串型別
T 時間段型別
U 使用者定義型別
V 位串型別
X unknown 型別
Z 內部使用的型別

提交更正

如果您在文件中發現任何不正確、與您對特定功能的經驗不符或需要進一步說明的內容,請使用此表格報告文件問題。