テーブルの定義とテーブルに含まれるカラムの情報を取得

PostgreSQL で作成したテーブルに関して、テーブルに含まれるカラムの一覧を取得する方法、およびテーブルを作成した時のテーブルの定義を取得する方法について解説します。

(Last modified: )

テーブルに含まれるカラムの一覧を取得する

最初に作成したテーブルに含まれるカラムに関する情報を取得する方法です。 psql メタコマンドの \d コマンドにテーブル名を指定して実行します。

\d table_name

では実際に試してみます。最初に public スキーマにある mybook テーブルのカラムの情報を取得します。

\d mybook

テーブルに含まれるカラムの一覧を取得する(1)

mybook テーブルに含まれるカラム名とカラム名毎のデータ型が表示されました。

今度は public スキーマにある bookmark テーブルのカラムの情報を取得します。

\d bookmark

テーブルに含まれるカラムの一覧を取得する(2)

bookmark テーブルでは id カラムに NOT NULL 制約が設定されていること、そして name カラムには DEFAULT 制約が設定されていることが確認できます。またテーブルに対するインデックスの有無も表示されました。

-- --

スキーマ検索パスに設定されているスキーマ以外のテーブルに関しては スキーマ名.ターブル名 の形式でテーブル名を指定して実行します。(スキーマ検索パスについては「スキーマ検索パスを設定する」を参照されてください)。

それでは myschema スキーマの中に作成した friends テーブルのカラムの情報を取得します。

\d myschema.friends

テーブルに含まれるカラムの一覧を取得する(2)

指定したスキーマの中に作成したテーブルのカラム情報を取得することができました。

テーブルを作成した時のテーブル定義を取得する

テーブルを作成した時の定義を確認するため調べたいテーブルを作成する時に実行された CREATE TABLE コマンドを確認する方法です。

実際には現在作成済みのテーブルと同じ構造のテーブルを作成するための CREATE TABLE コマンドを確認します。テーブル作成後に ALTER TABLE で変更した場合には変更後のテーブルを作成するための CREATE TABLE コマンドとなります。

PostgreSQL にはテーブル構造を取得するための SQL コマンドやメタコマンドが用意されていないので、本来データーベースのバックアップなどで使用される pg_dump コマンドを使います。 pg_dump コマンドは psql コマンドと同じ PostgreSQL をインストールしたディレクトリの中の bin ディレクトリに格納されています。

pg_dumpコマンドの場所(1)

pg_dump コマンドはデータベース毎に実行するもので、データベースを再構築するために必要なる SQL コマンドを出力します。そのまま実行してしまうと、データベースに作成済みの全てのテーブルの構造やテーブルに格納されているデータも出力します。今回は特定のテーブルの構造だけを確認したいので次のように実行します。

pg_dump -U ロール名 -t テーブル名 -s データベース名

-U のあとに接続するロール名を指定します。スーパーユーザーの postgres を指定します。 -t のあとに対象とするテーブル名を指定します。 -s を指定すると定義のみを出力しデータは出力しません。最後に対象とするデータベース名を指定します。

それでは実際に試してみます。今回は mydb データベースの中の public スキーマにある bookmark テーブルに関して出力します。コマンドプロンプトから次のように実行してください。

pg_dump -U postgres -t bookmark -s mydb > bookmark.sql

テーブルを作成した時のテーブル定義を取得する(1)

パスワードの入力待ちとなりますので、指定したロール名の接続用パスワードを入力してください。

テーブルを作成した時のテーブル定義を取得する(2)

bookmark テーブルの構造に関して bookmark.sql ファイルに出力されました。

それでは出力先のファイルである bookmark.sql ファイルをテキストファイルで開いて下さい。

テーブルを作成した時のテーブル定義を取得する(3)

ファイルの先頭にテーブルと直接関係のない情報が出力されています。テーブル定義に関する情報は次の部分です。

--
-- Name: bookmark; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE public.bookmark (
    id integer NOT NULL,
    name character varying(10) DEFAULT 'no site'::character varying
);


ALTER TABLE public.bookmark OWNER TO postgres;

--
-- Name: bookmark bookmark_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres
--

ALTER TABLE ONLY public.bookmark
    ADD CONSTRAINT bookmark_pkey PRIMARY KEY (id);

現在の bookmark テーブルと同じテーブルを作成するための CREATE TABLE コマンド、およびテーブルに対する PRIMARY KEY を設定するための ALTER TABLE コマンドが表示されています。

実際に bookmark テーブルを作成した時に実行した CREATE TABLE コマンドは次のようなものでしたので、実行したときとまったく同じ CREATE TABLE コマンドが取得できるわけではありませんが、まったく同じ構造のテーブルを作成するための SQL コマンドは取得することができます。

create table bookmark(
  id integer primary key, 
  name varchar(10) default 'no site'
);

-- --

今回は public スキーマに作成したテーブルでしたのでスキーマ名は省略しましたが、スキーマ検索パスに設定されていないスキーマの中のテーブルを指定する場合は スキーマ名.テーブル名 の形式で指定してください。

pg_dump -U postgres -t myschema.friends -s mydb > friends.sql

またテーブル作成後に ALTER TABLE コマンドを使って変更を行っている場合には、変更後のテーブル構造が出力される点に注意してください。

-- --

作成したテーブルに関して、テーブルに含まれるカラムの一覧を取得する方法、およびテーブルを作成した時のテーブルの定義を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。