ときたま、既存のPostgreSQL環境でテーブルやビューの作成時のSQLを確認することがある。
MySQLとかだと「SHOW CREATE ~」で確認できるのだけど、PostgreSQLでテーブル定義文を確認する場合はSQLからは確認ができず、pg_dumpでバックアップデータを取得してCREATE TABLEを抽出することで対応する。
pg_dump DB名 -s -t テーブル名 | awk '/^CREATE TABLE/,/^)/'
-bash-4.2$ pg_dump test_db -s -t test_table --schema-only | awk '/^CREATE TABLE/,/^)/' CREATE TABLE test_table ( id integer NOT NULL, name character varying(50) );
ビューの場合も、同様の方法で求める事ができる。
-bash-4.2$ pg_dump test_db -s -t test_v | awk '/^CREATE VIEW/,/;$/' CREATE VIEW test_v AS SELECT test1.id FROM test1;
単にカラムとかの定義を確認するだけなら、psqlで以下のようにコマンドを実行すれば確認が可能だ。
\d+ テーブル名(ビュー名)
test_db=# \d+ test_table テーブル "public.test_table" 列 | 型 | 修飾語 | ストレージ | 対象統計情報 | 説明 ------+-----------------------+---------------------------------------------------------+------------+--------------+------ id | integer | not null default nextval('test_table_id_seq'::regclass) | plain | | name | character varying(50) | | extended | | インデックス: "test_table_pkey" PRIMARY KEY, btree (id) OID を持つ: no test_db=# \d+ test_v ビュー "public.test_v" 列 | 型 | 修飾語 | ストレージ | 説明 ----+---------+--------+------------+------ id | integer | | plain | ビュー定義: SELECT test1.id FROM test1;
