PostgreSQL | スキーマ | 作成済みスキーマ一覧の確認

PostgreSQL で既に作成されているスキーマ一覧を確認する方法について説明する。

\dn コマンドを使用する

まず psql のメタコマンドを使用する方法について見てみる。既に作成されているスキーマ一覧を確認するには、対象データベースに接続して次のように実行する。

devkuma=# \dn
   스키마(schema) 목록
     이름      |  소유주
---------------+----------
 myschema      | postgres
 orange_schema | orange
 public        | postgres
 testschema    | postgres
(4개 행)


devkuma=#

現在接続している devkuma データベースには、デフォルトで作成される public スキーマのほかに、postgres ロール所有の myschema スキーマと、orange ロール所有の orange_schema スキーマが作成されている。

\dn コマンドに + を追加して実行すると、スキーマの基本情報に加えてアクセス権限も確認できる。

devkuma=# \dn+
                           스키마(schema) 목록
     이름      |  소유주  |     액세스 권한      |          설명
---------------+----------+----------------------+------------------------
 myschema      | postgres |                      |
 orange_schema | orange   |                      |
 public        | postgres | postgres=UC/postgres+| standard public schema
               |          | =UC/postgres         |
 testschema    | postgres |                      |
(4개 행)


devkuma=#

別のデータベースに接続して \dn コマンドを実行すると、新しく接続したデータベースで作成されているスキーマ一覧が表示される。次のように postgres データベースに接続して \dn コマンドを実行してみる。

devkuma=# \c postgres
접속정보: 데이터베이스="postgres", 사용자="postgres".
postgres=# \dn
스키마(schema) 목록
  이름  |  소유주
--------+----------
 public | postgres
(1개 행)


postgres=#

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

システムカタログ pg_namespace を確認する

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

名前 データ型 説明
oid oid 識別子。明示的に指定しないと取得できない。
nspname name 名前空間の名前
nspowner oid 名前空間の所有者
nspacl aclitem[] アクセス権限一覧

対象データベースに接続し、今回は pg_namespace から次のカラムのデータを取得してみる。

devkuma=# select nspname, nspowner, nspacl from pg_namespace;
      nspname       | nspowner |               nspacl
--------------------+----------+-------------------------------------
 pg_toast           |       10 |
 pg_temp_1          |       10 |
 pg_toast_temp_1    |       10 |
 pg_catalog         |       10 | {postgres=UC/postgres,=U/postgres}
 public             |       10 | {postgres=UC/postgres,=UC/postgres}
 information_schema |       10 | {postgres=UC/postgres,=U/postgres}
 myschema           |       10 |
 orange_schema      |    24635 |
 testschema         |       10 |
(9개 행)


devkuma=#

現在接続しているデータベースに含まれるスキーマ一覧を取得した。pg_ で始まるスキーマは PostgreSQL システムで使用される。また、information_schema もシステムで使用されるものである。

また、スキーマの所有者を表す nspowner には、ロールに関するデータを管理するシステムカタログ pg_authidoid 値が表示されている。そのため、実際のロール名を取得するには pg_authidrolname を参照する。たとえば、次のように実行する。

devkuma=# select nspname, pg_authid.rolname as schemaowner, nspacl
devkuma-#   from pg_namespace
devkuma-#   join pg_authid on pg_authid.oid = pg_namespace.nspowner;
      nspname       | schemaowner |               nspacl
--------------------+-------------+-------------------------------------
 pg_toast           | postgres    |
 pg_temp_1          | postgres    |
 pg_toast_temp_1    | postgres    |
 pg_catalog         | postgres    | {postgres=UC/postgres,=U/postgres}
 public             | postgres    | {postgres=UC/postgres,=UC/postgres}
 information_schema | postgres    | {postgres=UC/postgres,=U/postgres}
 myschema           | postgres    |
 orange_schema      | orange      |
 testschema         | postgres    |
(9개 행)


devkuma=#

スキーマ所有者のロール名を含めて、スキーマ一覧を確認できた。

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