作成済みのスキーマ一覧を表示する

PostgreSQL ではメタコマンドやシステムカタログを利用して作成済みのスキーマ一覧を取得することができます。ここでは PostgreSQL で作成済みのスキーマ一覧を取得する方法について解説します。

(Last modified: )

\dnコマンドを使用する

最初に psql のメタコマンドを使用する方法です。作成済みのスキーマ一覧を取得するには、対象のデータベースに接続したあとで次のように実行してください。

\dn

\dnコマンドを使用する(1)

現在接続している mydb データベースには、デフォルトで作成されている public スキーマの他に、 postgres ロールが所有者の myschema スキーマと、 momo ロールが所有者の momo スキーマが作成されています。

\dn コマンドに + を追加して実行するとスキーマに追加されているアクセス権限も含めて表示することができます。

\dn+

\dnコマンドを使用する(2)

別のデータベースに接続してから \dn コマンドを実行すると、新しく接続したデータベースで作成されているスキーマ一覧を取得できます。では postgres データベースに接続してからあらためて \dn コマンドを実行してください。

\c postgres
\dn

\dnコマンドを使用する(3)

現在接続している postgres データベースには、デフォルトで作成されている public スキーマだけが作成されていました。

システムカタログpg_namespaceから取得する

続いて PostgreSQL のシステムカタログの一つである pg_namespace から取得する方法です。システムカタログとは PostgreSQL の管理システムが使用するテーブルで、データベースやテーブルなどの情報を管理するために使用しています。 pg_namespace には次のようなカラムがあります。

名前データ型説明
oidoid識別子(明示的に指定しないと取得できません)
nspnamename名前空間の名前
nspowneroid名前空間の所有者
nspaclaclitem[]アクセス権限の一覧

それでは対象のデータベースに接続したあとで、今回は pg_namespace から次のカラムに関するデータを取得してみます。

select nspname, nspowner, nspacl from pg_namespace;

システムカタログpg_namespaceから取得する(1)

現在接続しているデータベースに含まれるスキーマの一覧を取得しました。( 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;

システムカタログpg_namespaceから取得する(2)

スキーマの所有者のロール名も含めてスキーマの一覧を取得することができました。

-- --

作成済みのスキーマ一覧を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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