PostgreSQL | データベース | 作成済みデータベース一覧の確認

PostgreSQL で作成されたデータベースの一覧を確認する方法について説明する。

\l コマンドを使用する

まず psql のメタコマンドを使用する方法である。作成されたデータベース一覧を取得するには、次のように実行する。

postgres=# \l
                                      데이터베이스 목록
   이름    |  소유주  | 인코딩 |     Collate      |      Ctype       |      액세스 권한
-----------+----------+--------+------------------+------------------+-----------------------
 devkuma   | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 devkuma2  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 postgres  | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 sample    | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 |
 template0 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
 template1 | postgres | UTF8   | Korean_Korea.949 | Korean_Korea.949 | =c/postgres          +
           |          |        |                  |                  | postgres=CTc/postgres
(6개 행)


postgres=#

作成されたデータベース一覧を確認できる。

システムカタログ pg_database から確認する

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

名前 説明
oid oid 識別子。明示的に指定しないと取得できない。
datname name データベース名
datdba oid データベース所有者
encoding int4 データベース文字セットの識別番号
datcollate name データベース文字列の照合順序
datctype name データベース文字分類
datistemplate bool すべてのユーザーが複製できるかどうか。false の場合は、スーパーユーザーまたはデータベース所有者のみ複製可能。
datallowconn bool データベースに接続できるかどうか。template0 のデータ変更を防ぐために使用される。
datconnlimit int4 同時接続の最大数。-1 は無制限。
datlastsysoid oid データベースの最終システム OID
datfrozenxid xid このデータベースでこの値より前のトランザクション ID は、永続的な凍結済みトランザクション ID を持つように変更されている。これは、このデータベースのトランザクション ID 周回(wraparound)問題を防ぎ、pg_xact を縮小するための VACUUM 作業を実行すべきかどうかを追跡するために使用される。
datminmxid xid このデータベース内で、トランザクション ID に置き換えられる前のすべてのマルチトランザクション ID。これは、トランザクション ID 周回(wraparound)問題を防ぐか、pg_multixact を縮小するためにデータベースを VACUUM すべきかどうかを追跡するために使用される。
dattablespace oid データベースのデフォルトテーブルスペース
datacl aclitem [] アクセス権限一覧

今回は pg_database から次のカラムのデータを取得してみる。

postgres=# select datname, datdba, encoding, datcollate, datctype from pg_database;
  datname  | datdba | encoding |    datcollate    |     datctype
-----------+--------+----------+------------------+------------------
 postgres  |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 template1 |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 template0 |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 sample    |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 devkuma   |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
 devkuma2  |     10 |        6 | Korean_Korea.949 | Korean_Korea.949
(6개 행)


postgres=#

作成されたデータベース一覧が取得できたことがわかる。

ここで、データベースの所有者を表す datdba には、ロールに関するデータを管理するシステムカタログ pg_authidoid 値が表示されている。そのため、実際のロール名を取得するには pg_authidrolname を参照する必要がある。また、文字セットを表す encoding は、pg_encoding_to_char 関数を使用すると実際の文字セット名を取得できる。

たとえば、次のように実行する。

postgres=# select datname,
postgres-#     pg_authid.rolname as dbrollname,
postgres-#     pg_encoding_to_char(encoding) as dbencoding,
postgres-#     datcollate,
postgres-#     datctype
postgres-#   from pg_database
postgres-#   join pg_authid on pg_authid.oid = pg_database.datdba;
  datname  | dbrollname | dbencoding |    datcollate    |     datctype
-----------+------------+------------+------------------+------------------
 devkuma2  | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 devkuma   | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 sample    | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 template0 | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 template1 | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
 postgres  | postgres   | UTF8       | Korean_Korea.949 | Korean_Korea.949
(6개 행)


postgres=#

データベース所有者や文字セットを含めて、データベース一覧を確認できる。

作成されたデータベース一覧を取得する方法について説明した。

参考