作成済みのデータベース一覧を表示する

広告
eyecatch

PostgreSQL で作成済みのデータベース一覧を取得する方法について解説します。

¥lコマンドを使用する

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

¥l

¥lコマンドを使用する(1)

作成済みのデータベース一覧を取得することができました。

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

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

名前説明
oidoid識別子(明示的に指定しないと取得できません)
datnamenameデータベース名
datdbaoidデータベースの所有者
encodingint4データベースの文字セットの識別番号
datcollatenameデータベースの照合順序
datctypenameデータベースの文字タイプ
datistemplateboolどのユーザーでも複製可能かどうか(false の場合はスーパーユーザまたはデータベースの所有者だけが複製可)
datallowconnboolデータベースに接続できるかどうか(template0のデータ変更防止のために使用)
datconnlimitint4同時コネクションの最大数(-1は無制限)
datlastsysoidoidデータベース最終のシステムOID
datfrozenxidxidこのデータベースの中で、この値よりも前のトランザクションIDは、永続的な(「凍結された」)トランザクションIDを持つように変更されています。 これは、このデータベースに対して、トランザクションID周回を防ぎ、かつ、pg_xactを縮小させることを目的としたバキュームを行うかどうかを追跡するために使用されます。
datminmxidxidこのデータベース内のトランザクションIDで置換される前のすべてのマルチトランザクションID。 これは、トランザクションIDの周回問題を防ぐ、またはpg_multixactを縮小させるためにデータベースをバキュームする必要があるかどうかを追跡するために使用されます。
dattablespaceoidデータベース用のデフォルトテーブル空間
dataclaclitem[]アクセス権限の一覧

※ datfrozenxid や datminmxid についてはよくわからなかったので公式サイトのヘルプよりそのまま転記させて頂いています。

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

select datname, datdba, encoding, datcollate, datctype from pg_database;

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

作成済みのデータベース一覧を取得することができました。

なおデータベースの所有者を表す 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;

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

データベースの所有者や文字セット名も含めてデータベースの一覧を取得することができました。

-- --

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

PostgreSQLの使い方の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)
Profile
profile_img

著者 / TATSUO IKURA

初心者~中級者の方を対象としたプログラミング方法や開発環境の構築の解説を行うサイトの運営を行っています。