pg_attribute にはテーブの列情報が格納されています。データベース内のすべてのテーブルの各列に対し必ず 1 つの pg_attribute 行があります。(また、インデックスとその他のオブジェクトに対しての属性記述があります。 pg_class を参照してください)。
属性という表現は列と同等の意味で、歴史的背景からそのように呼ばれています。
Table 3-4. pg_attribute の列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
attrelid | oid | pg_class.oid | この列が属するテーブル |
attname | name | 列名 | |
atttypid | oid | pg_type.oid | この列のデータ型 |
attstattarget | int4 | attdispersion は ANALYZE によってこの列にたいする集積された統計情報の詳細の度合を管理するものです。値がゼロの場合は統計情報を収集しません。正の値が厳密に意味するところはデータ型に依存します。スカラーデータ型に対して attstattarget は収集する"もっとも一般的な値"の目標となる数でありまた作成する度数分布図保存場所の目標数でもあります。 | |
attlen | int2 | pg_type の typlen をこの列の型に合わせたもの | |
attnum | int2 | 列の数。通常列は 1 から始まり増えてゆく番号付けがされます。 OID のようなシステムによる列は任意の負の数を保持しています。 | |
attndims | 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 カタログ中に対応する見出し語があります。 |