43.7. pg_attribute

pg_attributeカタログにはテーブルの列情報が格納されています。 データベース内の全てのテーブルの各列に対し必ず1つのpg_attribute行があります (また、インデックスと、pg_classに項目を持つ全てのオブジェクトに対しての属性記述があります。)

属性という表現は列と同等の意味で、歴史的背景からそのように呼ばれています。

表 43-7. pg_attributeの列

名前参照先説明
attrelidoidpg_class.oidこの列が属するテーブル
attnamename 列名
atttypidoidpg_type.oidこの列のデータ型
attstattargetint4  attdispersionANALYZEによるこの列に対する蓄積された統計情報をどの程度詳しく管理するかを規定します。値がゼロの場合は統計情報を収集しません。 負の値の場合は、システムのデフォルトの統計目標を使用すべきであるということです。正の値が厳密に意味するところはデータ型に依存します。スカラデータ型に対してattstattargetは収集する"最も一般的な値"の目標となる数であり、また作成する度数分布図保存場所の目標数でもあります。
attlenint2  この列の型のpg_type.typlenの複製
attnumint2  列の数です。列は1から始まる番号付けがなされます。OIDのようなシステムによる列には(任意の)負の数が付きます。
attndimsint4  列が配列型の場合は次元数を表現し、そうでない時はゼロです(現在配列の次元数は強制されていませんのでゼロ以外のどのような値であっても"これは配列である"ということを意味します)。
attcacheoffint4  格納時は必ず-1となりますが、メモリ内の行記述子に読み込まれた場合は、行内での属性オフセットをキャッシュするために更新される可能性があります。
atttypmodint4 atttypmodは、テーブル作成時に与えられた型固有のデータ(たとえばvarchar列の最大長)を記録します。 これは型固有の入力関数や長さ強制関数に渡されます。 atttypmodを必要としない型では、通常、この値は-1です。
attbyvalbool この列の型のpg_type.typbyvalの複製です。
attstoragechar  通常、この列の型のpg_type.typstorageの複製です。 TOAST可能なデータ型では、格納ポリシーを制御するために 列の作成後に変更することができます。
attalignchar  この列の型のpg_type.typalignの複写
attnotnullbool  NOT NULL制約式。このフィールドを変更し制約を有効にしたり無効にしたりできます。
atthasdefbool  この列にはデフォルト値があります。その場合、実際に値を定義するpg_attrdefカタログ中に対応する見出し語があります。
attisdroppedbool  この列は既に削除されていて有効ではありません。削除された列は物理的にはまだテーブル上に存在していますが、パーサによって無視されるためSQLでアクセスすることができません。
attislocalbool  この列はリレーション内でローカルに定義されます。列がローカルに定義されると同時に継承される場合もあることに注意してください。
attinhcountint4  この列が所有する直接の祖先の数です。祖先を持っている列の削除や名前は変更はできません。

削除された列のpg_attribute記述において、atttypidはゼロにリセットされます。 しかしattlenpg_typeからコピーされた他のフィールドは、有効なままです。この動作は、削除された列のデータ型が後になって削除されて、pg_type行が存在しないような状況の場合に必要となります。 attlenと他のフィールドは、テーブル内の行の中身を解釈するために使用されます。