pg_attribute

PostgreSQL 9.0.0文書
前のページ | 巻戻し | 第 45章システムカタログ | 早送り | 次のページ

# 45.7. `pg_attribute`

`pg_attribute`カタログにはテーブルの列情報が格納されます。 データベース内のすべてのテーブルの各列に対し必ず１つの`pg_attribute`行があります。 （また、インデックスと`pg_class`に項目を持つすべてのオブジェクトに対しての属性記述があります。）

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

表 45-7. `pg_attribute`の列

名前 | 型 | 参照先 | 説明
--- | --- | --- | ---
`attrelid` | `oid` | ``pg_class`.oid` | この列が属するテーブル
`attname` | `name` |  | 列名
`atttypid` | `oid` | ``pg_type`.oid` | この列のデータ型
`attstattarget` | `int4` |  | `attstattarget`は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可能なデータ型では、格納ポリシーを制御するために列の作成後に変更することができます。
`attalign` | `char` |  | この列の型の`pg_type.typalign`のコピー
`attnotnull` | `bool` |  | NOT NULL制約式。 この列を変更し制約を有効にしたり無効にしたりできます。
`atthasdef` | `bool` |  | この列にはデフォルト値があります。 その場合、実際に値を定義する`pg_attrdef`カタログ内に対応する項目があります。
`attisdropped` | `bool` |  | この列は既に削除されていて有効ではありません。 削除された列は物理的にはまだテーブル上に存在していますが、パーサによって無視されるためSQLでアクセスすることができません。
`attislocal` | `bool` |  | この列はリレーション内でローカルに定義されます。 列がローカルに定義されると同時に継承される場合もあることに注意してください。
`attinhcount` | `int4` |  | この列が持つ直接の祖先の数です。 祖先を持っている列の削除や名前は変更はできません。
`attacl` | `aclitem[]` |  | この列に特定して付与された場合における、列レベルのアクセス権限
`attoptions` | `text[]` |  | "keyword=value"文字列のような、属性レベルのオプション

削除された列の`pg_attribute`項目では、`atttypid`はゼロにリセットされます。 しかし`attlen`と`pg_type`からコピーされた他のフィールドは、有効なままです。 この動作は、削除された列のデータ型が後になって削除されて、`pg_type`行が存在しないような状況の場合に必要となります。 `attlen`と他のフィールドは、テーブル内の行の内容を解釈するために使用されます。

前のページ | ホーム | 次のページ
`pg_attrdef` | 上に戻る | `pg_authid`