支援的版本:目前 (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

51.64. pg_type #

目錄 pg_type 儲存關於資料類型的資訊。基本類型和列舉類型(純量類型)使用 CREATE TYPE 建立,而網域使用 CREATE DOMAIN 建立。複合類型會為資料庫中的每個資料表自動建立,以表示資料表的列結構。也可以使用 CREATE TYPE AS 建立複合類型。

表 51.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 表示以空值結尾的 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 是資料類型的任意分類,解析器使用它來決定哪些隱式轉換應該是 偏好的。請參閱 表 51.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 為零,則此值應為零。但是,如果處理常式不需要 typelem 來判斷下標結果類型,則當 typsubscript 不為零時,此值可能為零。請注意,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 告訴 varlena 類型(typlen = -1 的那些類型)該類型是否已準備好進行 TOAST,以及此類型屬性的預設策略應該是什麼。可能的值是

  • p (plain):值必須始終以 plain 方式儲存(非 varlena 類型始終使用此值)。

  • e (external):值可以儲存在輔助TOAST關係中(如果關係具有一個,請參閱 pg_class.reltoastrelid)。

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

  • x (extended):值可以壓縮和/或移動到輔助關係。

x 是 toast-able 類型的常用選項。請注意,m 值也可以移至輔助儲存,但僅作為最後手段(ex 值首先移動)。

typnotnull bool

typnotnull 表示類型上的 not-null 約束。僅用於 domain。

typbasetype oid (參考 pg_type.oid)

如果這是 domain(請參閱 typtype),則 typbasetype 識別此類型所基於的類型。如果此類型不是 domain,則為零。

typtypmod int4

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

typndims int4

typndims 是陣列上 domain 的陣列維度數(也就是說,typbasetype 是一個陣列類型)。對於陣列類型上的 domain 以外的類型,則為零。

typcollation oid (參考 pg_collation.oid)

typcollation 指定類型的定序。如果該類型不支援定序,則此值將為零。支援定序的基本類型將在此處具有非零值,通常為 DEFAULT_COLLATION_OID。如果為 domain 指定了定序,則 collatable 類型上的 domain 可能具有與其基本類型不同的定序 OID。

typdefaultbin pg_node_tree

如果 typdefaultbin 不為 null,則它是該類型的預設運算式的 nodeToString() 表示形式。這僅用於 domain。

typdefault text

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

typacl aclitem[]

存取權限;詳情請參閱 第 5.8 節


注意

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

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

表格 51.65. typcategory 代碼

代碼 類別
A 陣列類型
B 布林類型
C 複合類型
D 日期/時間類型
E 枚舉類型
G 幾何類型
I 網路位址類型
N 數值類型
P 假類型 (Pseudo-types)
R 範圍類型
S 字串類型
T 時間跨度類型
U 使用者定義類型
V 位元字串類型
X unknown 類型
Z 內部使用類型

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。