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_authid の oid 値が表示されている。そのため、実際のロール名を取得するには pg_authid の rolname を参照する。たとえば、次のように実行する。
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=#
スキーマ所有者のロール名を含めて、スキーマ一覧を確認できた。
–
ここまで、作成済みスキーマ一覧を取得する方法について説明した。