| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 43. 系統表 | Fast Forward | Next |
系統表pg_type存儲有關數據類型的信息。基本類型 (標量類型)是用 CREATE TYPE 創建的。 同時還為數據庫中每個表自動創建一個復合類型,以表示該表的行結構。 我們還可以用CREATE TYPE AS創建復合類型, 用 CREATE DOMAIN 創建衍生的類型。
Table 43-29. pg_type 字段
| 名字 | 類型 | 引用 | 描述 |
|---|---|---|---|
| typname | name | 數據類型名字 | |
| typnamespace | oid | pg_namespace.oid | 包含這個類型的名字空間的 OID |
| typowner | int4 | pg_shadow.usesysid | 該類型的所有人 |
| typlen | int2 | 對于定長類型,typlen是該類型內部 表現形式的字節數目。對于變長類型,typlen 是負數。 -1 表示一種"變長"類型(有長度字屬性的數據), -2 表示這是一個 NULL 結尾的 C 字串。 | |
| typbyval | bool | typbyval 判斷內部過程傳遞這個類型的數值時 是通過傳值還是傳引用。 只有 char,short,和 int 或相當的項目可以傳值,所以如果該類型不是 1,2,4字節長, PostgreSQL 不會有傳值的選擇,因此 typbyval 最好是假。 變長類似總是傳引用。請注意即使長度可以傳值, typbyval 也可以為假; 比如,現在 float4就是如此。 | |
| typtype | char | typtype對于基礎類型 是 b,對于復合類型是 c (也就是說,一個表的行類型)。 衍生類型時是 d (也就是說,一個域), 或者是p 表示偽類型。 又見 typrelid 和 typbasetype。 | |
| typisdefined | bool | 如果定義了類型則為真,如果是一種尚未定義的類型的佔位符則為假。 如果typisdefined為假,那麼除了該類型名稱,名字空間,和 OID 之外沒有 可靠的信息。 | |
| typdelim | char | 當分析數組輸入時,分隔兩個此類型數值的字符 請注意該分隔符是與數組元素數據類型相關聯的, 而不是和數組數據類型關聯。 | |
| typrelid | oid | pg_class.oid | 如果是復合類型(見 typtype) 那麼這個字段指向 pg_class 中定義該表的元組。 (對于自由存在的復合類型,pg_class 記錄 並不表示一個表,但是我們總需要它來查找該類型聯接的 pg_attribute 記錄。) 非復合類型為零。 |
| typelem | oid | pg_type.oid | 如果 typelem 不為 0, 那麼它標識 pg_type 裡面的另外一行。 當前類型可以當做一個產生類型為 typelem 的數組來描述。 一個"真正的" 數組類型是變長的 (typlen = -1), 但是一些定長的(typlen> 0)類型 也擁有非零的 typelem,比如 name 和 oidvector。 如果一個定長類型擁有一個typelem, 那麼他的內部形式必須是 typelem 數據類型的 某個數目地個數值,不能有其它數據。變長數組類型有一個該數組子過程定義的頭(文件)。 |
| typinput | regproc | pg_proc.oid | 輸入轉換函數(文本格式) |
| typoutput | regproc | pg_proc.oid | 輸出轉換函數(文本格式) |
| typreceive | regproc | pg_proc.oid | 輸入轉換函數(二進制格式),如果沒有則為 0 |
| typsend | regproc | pg_proc.oid | 輸出轉換函數(二進制格式),如果沒有則為 0 |
| typalign | char | typalign 是當存儲此類型的數值是要求的對齊性質。它應用于磁盤存儲以及 該值在 PostgreSQL 內部的大多數形式。 如果數值是連續存放的,比如在磁盤上以完全的裸數據的形式存放時, 那麼先在此類型的數據前填充空白,這樣它就可以按照要求的界限存儲。 對齊引用是該序列中第一個數據的開頭。 可能的值有:
| |
| typstorage | char | typstorage 告訴一個變長類型(那些有 typlen = -1的) 說該類型是否準備 toast,以及對這種屬性的類型 的缺省策略是什麼。 可能的值有
請注意 m 域也可以移到從屬表裡存儲,但只是最後的解決方法 (e 和 x 域先移走)。 | |
| typnotnull | bool | typnotnull 代表在某類型上的一個 NOT NULL 約束。目前只用于域。 | |
| typbasetype | oid | pg_type.oid | 如果這是一個衍生類型(參閱 typtype), 那麼 typbasetype 標識作為這個類型 的基礎的類型。如果不是衍生類型則為零。 |
| typtypmod | int4 | 域使用 typtypmod 記錄要施用到它們的基礎 類型上的typmod(如果基礎類型不使用typmod,那麼為 -1)。如果這種類型 不是域,那麼為 -1。 | |
| typndims | int4 | 如果一個域是數組,那麼 typndims 是數組維數的數值 (也就是說,typbasetype是一個數組類型;域的typelem將匹配基本類型的 typelem)。非域非數組域為零。 | |
| typdefaultbin | text | 如果 typdefaultbin 為非 NULL,那麼它是 該類型缺省表達式的nodeToString表現形式。目前這個字段只用于域。 | |
| typdefault | text | 如果某類型沒有相關缺省值,那麼typdefault是 NULL。如果 typdefaultbin 不是 NULL, 那麼 typdefault 必須包含一個 typdefaultbin 代表的缺省表達式的人類可讀的版本。 如果 typdefaultbin 為 NULL 但 typdefault 不是,那麼 typdefault 是該類型缺省值的外部表現形式, 我們可以把它交給該類型的輸入轉換器生成一個常量。 |