ときたま、既存の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;