作成済みのスキーマ一覧を表示する
PostgreSQL ではメタコマンドやシステムカタログを利用して作成済みのスキーマ一覧を取得することができます。ここでは PostgreSQL で作成済みのスキーマ一覧を取得する方法について解説します。
(Last modified: )
\dnコマンドを使用する
最初に psql のメタコマンドを使用する方法です。作成済みのスキーマ一覧を取得するには、対象のデータベースに接続したあとで次のように実行してください。
\dn
現在接続している mydb データベースには、デフォルトで作成されている public スキーマの他に、 postgres ロールが所有者の myschema スキーマと、 momo ロールが所有者の momo スキーマが作成されています。
\dn コマンドに + を追加して実行するとスキーマに追加されているアクセス権限も含めて表示することができます。
\dn+
別のデータベースに接続してから \dn コマンドを実行すると、新しく接続したデータベースで作成されているスキーマ一覧を取得できます。では postgres データベースに接続してからあらためて \dn コマンドを実行してください。
\c postgres
\dn
現在接続している postgres データベースには、デフォルトで作成されている public スキーマだけが作成されていました。
システムカタログpg_namespaceから取得する
続いて PostgreSQL のシステムカタログの一つである pg_namespace から取得する方法です。システムカタログとは PostgreSQL の管理システムが使用するテーブルで、データベースやテーブルなどの情報を管理するために使用しています。 pg_namespace には次のようなカラムがあります。
名前 | データ型 | 説明 |
---|---|---|
oid | oid | 識別子(明示的に指定しないと取得できません) |
nspname | name | 名前空間の名前 |
nspowner | oid | 名前空間の所有者 |
nspacl | aclitem[] | アクセス権限の一覧 |
それでは対象のデータベースに接続したあとで、今回は pg_namespace から次のカラムに関するデータを取得してみます。
select nspname, nspowner, nspacl from pg_namespace;
現在接続しているデータベースに含まれるスキーマの一覧を取得しました。( pg_ で始まるスキーマは PostgreSQL のシステムが使用しているものです。また information_schema もシステムが使用するものです)。
なおスキーマの所有者をあらわす nspowner はロールに関するデータを管理しているシステムカタログ pg_authid の oid の値が表示されているので、実際のロール名を取得するには pg_authid の rolname を参照します。例えば次のように実行してください。
select nspname, pg_authid.rolname as schemaowner, nspacl from pg_namespace join pg_authid on pg_authid.oid = pg_namespace.nspowner;
スキーマの所有者のロール名も含めてスキーマの一覧を取得することができました。
-- --
作成済みのスキーマ一覧を取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。