3.4. pg_attribute

pg_attributeにはテーブルカラム情報が格納されています。 データベース内のすべてのテーブルの各カラムには必ず1つの pg_attribute行があります。(また、インデックスと その他のオブジェクトにも属性があります。pg_classも 参照して下さい。)

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

Table 3-4. pg_attribute カラム

名前参照先説明
attrelidoidpg_class.oidこのカラムが属するテーブル
attnamename カラム名
atttypidoidpg_type.oidこのカラムのデータ型
attdispersionfloat4  attdispersionとは、 カラムの分散値 (0.0〜1.0)です。統計の計算が済んでいない場合にはゼロになります。 また、VACUUMによって、カラムに重複したエント リがない(そのばあい、分散は、現在のテーブルの大きさに対し) 1.0/numberOfRows)とすべきです)ことが分かってい る場合は -1.0 になります。 -1.0 とする小細工は、 attdispersionよりも行数の方が頻繁に 更新されるので有用です。カラムに重複したエントリがないという性 質が保持されると仮定しています。
attlenint2  これはpg_typetyplen をこのカラムの型にあわせたもの
attnumint2  カラムの数です。通常、カラムは1から始まり増える番号付けがされます。 oidのようなシステムカラムは 任意の負の数を保持しています。
attnelemsint4 もしカラムが配列だった場合、その配列の次元の数。
attcacheoffint4  格納時は必ず-1となりますが、メモリ内でタプル記述子にロードされた時は、 タプル内の更新されたキャッシュの属性のオフセットである可能性があります。
atttypmodint4  atttypmodはテーブルが作成された時に指定された、 型固有のデータ型を記録します。(例えば、varcharカラムの最大長さなど)。 そしてそれらは型特有のインプット/アウトプット関数に第3引数として渡されます。 typmod の必要がない型の値は通常‐1です。
attbyvalbool  これはpg_typetypbyval をこのカラムの型にあわせたものです。
attstoragechar  これはpg_typetypstorage をこのカラムの型にあわせたものです。
attissetbool  真であるならば、この属性は集合となります。その場合、属性に実際に 格納されるものはpg_procカタログにある タプルのOIDになります。 pg_proc タプルにはこのセットを定義する クエリの文字列(セットを取得するためのクエリなど)があります。 atttypid (上記参照)はこの問い合わせによって 返された型を参照しますが、実際のこの属性の長さはoidの 長さとなります。 --- これは正論なのですが、今日ではかなり守られていないかもしれません。
attalignchar  これはpg_typetypalign をこのカラムの型にあわせたものです。
attnotnullbool  これはNOT NULL 制約を意味しています。フィ−ルドを変更してこの制約を有効にしたり、 無効にしたりできます。
atthasdefbool  このカラムにはデフォルト値をもっています。その場合、実際に値を定義するpg_attrdefカタログ中に対応するエントリがあります。