作成済みのデータベース一覧を表示する
PostgreSQL で作成済みのデータベース一覧を取得する方法について解説します。
(Last modified: )
\lコマンドを使用する
最初に psql のメタコマンドを使用する方法です。作成済みのデータベース一覧を取得するには次のように実行してください。
\l
作成済みのデータベース一覧を取得することができました。
システムカタログpg_databaseから取得する
続いて PostgreSQL のシステムカタログの一つである 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周回を防ぎ、かつ、pg_xactを縮小させることを目的としたバキュームを行うかどうかを追跡するために使用されます。 |
datminmxid | xid | このデータベース内のトランザクションIDで置換される前のすべてのマルチトランザクションID。 これは、トランザクションIDの周回問題を防ぐ、またはpg_multixactを縮小させるためにデータベースをバキュームする必要があるかどうかを追跡するために使用されます。 |
dattablespace | oid | データベース用のデフォルトテーブル空間 |
datacl | aclitem[] | アクセス権限の一覧 |
※ datfrozenxid や datminmxid についてはよくわからなかったので公式サイトのヘルプよりそのまま転記させて頂いています。
今回は pg_database から次のカラムに関するデータを取得してみます。
select datname, datdba, encoding, datcollate, datctype from pg_database;
作成済みのデータベース一覧を取得することができました。
なおデータベースの所有者を表す datdba はロールに関するデータを管理しているシステムカタログ pg_authid の oid の値が表示されているので、実際のロール名を取得するには pg_authid の rolname を参照します。また文字セットを表す encoding は pg_encoding_to_char 関数を使うと実際の名前を取得できます。
例えば次のように実行してください。
select datname, pg_authid.rolname as dbrollname, pg_encoding_to_char(encoding) as dbencoding, datcollate, datctype from pg_database join pg_authid on pg_authid.oid = pg_database.datdba;
データベースの所有者や文字セット名も含めてデータベースの一覧を取得することができました。
-- --
作成済みのデータベース一覧を取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。