pg_attributeにはテーブルカラム情報が格納されています。 データベース内のすべてのテーブルの各カラムには必ず1つの pg_attribute行があります。(また、インデックスと その他のオブジェクトにも属性があります。pg_classも 参照して下さい。)
属性という表現は、カラムと同等の意味で、歴史的背景からそのように呼ばれています。
Table 3-4. pg_attribute カラム
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
attrelid | oid | pg_class.oid | このカラムが属するテーブル |
attname | name | カラム名 | |
atttypid | oid | pg_type.oid | このカラムのデータ型 |
attdispersion | float4 | attdispersionとは、 カラムの分散値 (0.0〜1.0)です。統計の計算が済んでいない場合にはゼロになります。 また、VACUUMによって、カラムに重複したエント リがない(そのばあい、分散は、現在のテーブルの大きさに対し) 1.0/numberOfRows)とすべきです)ことが分かってい る場合は -1.0 になります。 -1.0 とする小細工は、 attdispersionよりも行数の方が頻繁に 更新されるので有用です。カラムに重複したエントリがないという性 質が保持されると仮定しています。 | |
attlen | int2 | これはpg_typeのtyplen をこのカラムの型にあわせたもの | |
attnum | int2 | カラムの数です。通常、カラムは1から始まり増える番号付けがされます。 oidのようなシステムカラムは 任意の負の数を保持しています。 | |
attnelems | int4 | もしカラムが配列だった場合、その配列の次元の数。 | |
attcacheoff | int4 | 格納時は必ず-1となりますが、メモリ内でタプル記述子にロードされた時は、 タプル内の更新されたキャッシュの属性のオフセットである可能性があります。 | |
atttypmod | int4 | atttypmodはテーブルが作成された時に指定された、 型固有のデータ型を記録します。(例えば、varcharカラムの最大長さなど)。 そしてそれらは型特有のインプット/アウトプット関数に第3引数として渡されます。 typmod の必要がない型の値は通常‐1です。 | |
attbyval | bool | これはpg_typeのtypbyval をこのカラムの型にあわせたものです。 | |
attstorage | char | これはpg_typeのtypstorage をこのカラムの型にあわせたものです。 | |
attisset | bool | 真であるならば、この属性は集合となります。その場合、属性に実際に 格納されるものはpg_procカタログにある タプルのOIDになります。 pg_proc タプルにはこのセットを定義する クエリの文字列(セットを取得するためのクエリなど)があります。 atttypid (上記参照)はこの問い合わせによって 返された型を参照しますが、実際のこの属性の長さはoidの 長さとなります。 --- これは正論なのですが、今日ではかなり守られていないかもしれません。 | |
attalign | char | これはpg_typeのtypalign をこのカラムの型にあわせたものです。 | |
attnotnull | bool | これはNOT NULL 制約を意味しています。フィ−ルドを変更してこの制約を有効にしたり、 無効にしたりできます。 | |
atthasdef | bool | このカラムにはデフォルト値をもっています。その場合、実際に値を定義するpg_attrdefカタログ中に対応するエントリがあります。 |