41.7. pg_attribute

pg_attribute 資料表 儲存關於資料表的字串的訊息。資料庫裡每個資料表的每個字串都在 pg_attribute 裡有一行。 (還有用於索引,以及所有在 pg_class 裡有記錄的對象。)

術語 屬性 等效於 列/字串,使用它是歷史原因。

Table 41-7. pg_attribute 字串

名字類型引用描述
attrelidoidpg_class.oid此列/字串所屬的資料表
attnamename 字串名字
atttypidoidpg_type.oid這個字串的資料類型
attstattargetint4  attstattarget 控制 ANALYZE 為這個字串積累的統計細節的級別。 零值資料表示不蒐集統計訊息。負數資料表示使用系統預設的統計對象。 正數值的確切訊息是和資料類型相關的。 對於標量資料類型,attstattarget 既是要蒐集的"最常用數值"的目標數目,也是要建立的柱狀圖的目標數量。
attlenint2  是本字串類型 pg_type.typlen 的拷貝。
attnumint2  字串數目。普通字串是從 1 開始計數的。系統字串, 比如 oid, 有(任意)正數。
attndimsint4  如果該字串是數組,那麼是維數,否則是 0。 (目前,一個數組的維數並未強制,因此任何非零值都資料表示 "這是一個數組"。)
attcacheoffint4  在磁盤上總是 -1,但是如果裝載入內存中的行描述器中, 它可能會被更新以緩衝在行中字串的偏移量。
atttypmodint4  atttypmod 資料在建立資料表的時候 提供的類型相關的資料(比如,一個 varchar 字串的最大長度)。 它傳遞給類型相關的輸入和長度轉換函數當做第三個參數。 其值對那些不需要 atttypmod 的類型而言通常為 -1。
attbyvalbool  通常是這個字串類型的 pg_type.typbyval 的拷貝。
attstoragechar  這個字串的類型的 pg_type.typstorage 的拷貝。對於可壓縮的資料類型(TOAST),這個字串可以在字串建立之後改變, 以便於控制儲存策略。
attalignchar  這個字串的類型的 pg_type.typalign 的拷貝
attnotnullbool  這代資料表一個非空約束。我們可以改變這個字串以打開或者關閉這個約束。
atthasdefbool  這個字串有一個預設值,此時它對應 pg_attrdef 資料表裡實際定義此值的記錄。
attisdroppedbool  這個字串已經被刪除了,不再有效。一個已經刪除的字串實際上仍然存在資料表中, 但會被分析器忽略,因此不能再透過SQL訪問。
attislocalbool  這個字串是局部定義在關係中的。請注意一個字串可以同時是局部定義 和繼承的。
attinhcountint4  這個字串所擁有的直接祖先的個數。如果一個字串的祖先個數非零, 那麼它就不能被刪除或重命名。

在一個刪除了的字串的 pg_attribute 記錄裡, atttypid 重置為零,但是 attlen 和其它從 pg_type 拷貝的仍然有效。 這麼安排是為了對付後來背刪除的字串的資料類型也被刪除的情況, 因為這個時候不再有 pg_type 行了。 attlen 和其它字串可以用於解析資料表中一行內容。