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引数として渡されます。 タプルの必要がない型の値は通常‐1です。
attbyvalbool  これはpg_typetypbyval をこのカラムの型にあわせたものです。
attstoragechar  これはpg_typetypstorage をこのカラムの型にあわせたものです。
attissetbool  真であるならば、この属性はセットとなります。その場合、属性に実際に 格納されるものはpg_procカタログにある タプルのOIDになります。 pg_proc タプルにはこのセットを定義する クエリ−の文字列(セットを取得するためのクエリ−など)があります。 atttypid (上記参照)はこのクエリ−によって 返された型を参照しますが、実際のこの属性の長さはoidの 長さとなります。 --- これは正論なのですが、今日ではかなり守られていないかもしれません。
attalignchar  これはpg_typetypalign をこのカラムの型にあわせたものです。
attnotnullbool  これはNOT NULL 制約を意味しています。フィ−ルドを変更してこの制約を有効にしたり、 無効にしたりできます。
atthasdefbool  このカラムにはpg_attrdefカタログですでに定義されている デフォルト値があります。