pg_attribute
pg_attribute
カタログにはテーブルの列情報が格納されます。
データベース内のすべてのテーブルの各列に対し必ず1つのpg_attribute
行があります。
(また、インデックスとpg_class
に項目を持つすべてのオブジェクトに対しての属性記述があります。)
属性という表現は列と同等の意味で、歴史的背景からそのように呼ばれています。
表49.7 pg_attribute
の列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
attrelid | oid |
| この列が属するテーブル |
attname | name | 列名 | |
atttypid | 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 | 非NULL制約を表します。 | |
atthasdef | bool | この列にはデフォルト値があります。
その場合、実際に値を定義するpg_attrdef カタログ内に対応する項目があります。
| |
attisdropped | bool | この列は既に削除されていて有効ではありません。 削除された列は物理的にはまだテーブル上に存在していますが、パーサによって無視されるためSQLでアクセスすることができません。 | |
attislocal | bool | この列はリレーション内でローカルに定義されます。 列がローカルに定義されると同時に継承される場合もあることに注意してください。 | |
attinhcount | int4 | この列が持つ直接の祖先の数です。 祖先を持っている列の削除や名前は変更はできません。 | |
attcollation | oid |
| 列で定義された照合順序。列が照合順序の設定ができないデータ型の場合はゼロ |
attacl | aclitem[] | この列に特定して付与された場合における、列レベルのアクセス権限 | |
attoptions | text[] | 「keyword=value」文字列のような、属性レベルのオプション | |
attfdwoptions | text[] | 「keyword=value」文字列のような、外部データラッパオプションの属性レベル |
削除された列のpg_attribute
項目では、atttypid
はゼロにリセットされます。
しかしattlen
とpg_type
からコピーされた他のフィールドは、有効なままです。
この動作は、削除された列のデータ型が後になって削除されて、pg_type
行が存在しないような状況の場合に必要となります。
attlen
と他のフィールドは、テーブル内の行の内容を解釈するために使用されます。