pg_attribute カタログにはテーブルの列情報が格納されています。データベース内のすべてのテーブルの各列に対し必ず一つの pg_attribute 行があります。(また、インデックスとその他のオブジェクトに対しての属性記述があります。pg_class を参照してください。)
属性という表現は列と同等の意味で、歴史的背景からそのように呼ばれています。
表 43-7. pg_attribute Columns
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
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 列の最大長など)型固有のデータ型を記録していて、型固有の入力関数と長さ強制変換関数に渡されます。atttypmod の必要がない型の値は通常 ‐1 です。 | |
attbyval | bool | この列の型の pg_type.typbyval の複製です。 | |
attstorage | char | 通常、この列の型の pg_type.typstorage の複製です。 TOAST 可能なデータ型では、格納ポリシーを制御するために 列の作成後に変更することができます。 | |
attisset | bool | 真の場合、この属性は集合です。その場合、属性に実際に格納されるものは pg_proc カタログにある行の OID になります。pg_proc 行にはこの集合を定義する問い合わせ文字列、つまり集合を取得するための問い合わせがあります。ですから atttypid(上記を参照)はこの問い合わせによって返された型を参照しますが、この属性の実際の長さは OID の長さです。少なくともこれは理論の上でのことです。今日ではあまり守られていないようです。 | |
attalign | char | この列の型の pg_type.typalign の複写 | |
attnotnull | bool | NOT NULL 制約式。このフィールドを変更し制約を有効にしたり無効にしたりできます。 | |
atthasdef | bool | この列にはデフォルト値があります。その場合、実際に値を定義するpg_attrdef カタログ中に対応する見出し語があります。 | |
attisdropped | bool | この列はすでに削除されていて有効ではありません。削除された列は物理的にはまだテーブル上に存在していますが、パーサによって無視されるため SQL でアクセスすることができません。 | |
attislocal | bool | この列はリレーション内でローカルに定義されます。列がローカルに定義されると同時に継承される場合もあることに注意してください。 | |
attinhcount | int4 | この列が所有する直接の祖先の数です。祖先を持っている列の削除や名前は変更はできません。 |