PG_TABLE_DEF
テーブルの列に関する情報を格納します。
PG_TABLE_DEF は、テーブルに関してユーザーに表示される情報のみを返します。もし PG_TABLE_DEF が予期した結果を返さない場合、該当のスキーマを含むように search_path パラメータが正しく設定されていることを確認します。
SVV_TABLE_INFO を使用すると、データ分散スキュー、キー分散スキュー、テーブルサイズ、統計情報など、テーブルに関するより包括的な情報を表示することができます。
テーブルの列
列名 | データ型 | 説明 |
---|---|---|
schemaname | name | スキーマ名。 |
tablename | name | テーブル名。 |
column | name | 列名。 |
type | text | 列のデータ型。 |
encoding | character(32) | 列のエンコード。 |
distkey | boolean | この列がテーブルの分散キーである場合は True。 |
sortkey | integer | ソートキーの列の順序。テーブルが複合ソートキーを使用する場合、ソートキーに含まれるすべての列は、ソートキー内の列の位置を示す正の値を持ちます。テーブルがインターリーブソートキーを使用する場合、ソートキーに含まれる各列は正または負の値を交互に持ち、この値の絶対値がソートキー内の列の位置を示します。0 の場合、列はソートキーに含まれません。 |
notnull | boolean | 列が NOT NULL 制約を持つ場合は True。 |
例
次に、LINEORDER_COMPOUND テーブルの複合ソートキーの列の例を示します。
select "column", type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename = 'lineorder_compound' and sortkey <> 0; column | type | encoding | distkey | sortkey | notnull -------------+---------+----------+---------+---------+-------- lo_orderkey | integer | delta32k | false | 1 | true lo_custkey | integer | none | false | 2 | true lo_partkey | integer | none | true | 3 | true lo_suppkey | integer | delta32k | false | 4 | true lo_orderdate | integer | delta | false | 5 | true (5 rows)
次に、LINEORDER_INTERLEAVED テーブルのインターリーブソートキーの列の例を示します。
select "column", type, encoding, distkey, sortkey, "notnull" from pg_table_def where tablename = 'lineorder_interleaved' and sortkey <> 0; column | type | encoding | distkey | sortkey | notnull -------------+---------+----------+---------+---------+-------- lo_orderkey | integer | delta32k | false | -1 | true lo_custkey | integer | none | false | 2 | true lo_partkey | integer | none | true | -3 | true lo_suppkey | integer | delta32k | false | 4 | true lo_orderdate | integer | delta | false | -5 | true (5 rows)
PG_TABLE_DEF は、検索パスに含まれているスキーマのテーブルの情報のみを返します。詳細については、「search_path」を参照してください
例えば、新しいスキーマと新しいテーブルを作成し、PG_TABLE_DEF にクエリを実行するとします。
create schema demo; create table demo.demotable (one int); select * from pg_table_def where tablename = 'demotable'; schemaname|tablename|column| type | encoding | distkey | sortkey | notnull ----------+---------+------+------+----------+---------+---------+--------
このクエリは、新しいテーブルの列を返しません。search_path
の設定を検証します。
show search_path; search_path --------------- $user, public (1 row)
demo
スキーマを検索パスに追加し、クエリを再度実行します。
set search_path to '$user', 'public', 'demo'; select * from pg_table_def where tablename = 'demotable'; schemaname| tablename |column| type | encoding |distkey|sortkey| notnull ----------+-----------+------+---------+----------+-------+-------+-------- demo | demotable | one | integer | none | f | 0 | f (1 row)