PostgreSQLでデータベース一覧を表示する方法【psql/SQL完全ガイド】
CONTENTS
PostgreSQLを使った開発や運用の現場では、
「今このサーバーにどんなデータベースが存在しているのかを確認したい」
という場面が頻繁に発生します。
- 新しい環境にログインした直後
- 本番・検証・ローカル環境を切り替えるとき
- DB棚卸しや権限トラブルの調査
- 「このDB、本当に作られている?」という初動確認
こうした場面で、データベース一覧を正確かつ素早く確認できるかは、運用品質を大きく左右します。
この記事では、PostgreSQLでデータベース一覧を表示する方法を、
初心者にも分かりやすく、かつ実務でそのまま使えるレベルまで深掘りして解説します。
この記事を読むことで、以下が理解できます。
- psqlで一瞬で一覧を確認する方法
- SQLで一覧を取得・加工・絞り込む方法
- 環境や権限によって「一覧が見えない」原因と対処法
- 実運用で失敗しない確認ポイント
PostgreSQLでデータベース一覧を確認する前提知識
psqlで正しく接続できているかが最重要
データベース一覧は、「どのPostgreSQLサーバーに接続しているか」によって結果が変わります。
- ローカルだと思っていたら実は本番
- STGに入ったつもりが別インスタンス
- Dockerコンテナではなくホスト側に接続していた
こうした事故は珍しくありません。
そのため、一覧表示の前に必ず以下を意識します。
- 接続ホスト(-h)
- ポート番号(-p)
- ユーザー(-U)
- 接続先DB(-d)
psql -U appuser -d postgres -h 127.0.0.1 -p 5432
psqlのプロンプトに表示される接続先情報を見て、
「今どの環境にいるか」を必ず確認しましょう。
psqlでデータベース一覧を表示する方法(\l / \list)
\l(\list)は最速・最定番の確認手段
psqlに接続できたら、以下のコマンドを実行します。
\l
または
\list
これだけで、PostgreSQLサーバー上に存在するデータベース一覧が表示されます。
\lで確認できる主な項目
| 項目 | 意味 |
|---|---|
| Name | データベース名 |
| Owner | データベースの所有者 |
| Encoding | 文字コード |
| Collate | 照合順序 |
| Ctype | 文字種別 |
| Access privileges | アクセス権限 |
実務で特に重要なポイント
- Owner
→ 運用責任の所在。想定外のオーナーは要注意 - Encoding / Collate / Ctype
→ 後から変更困難。初期構築時の確認必須 - Access privileges
→ 不要に広い権限が付与されていないか
\lは「一覧を見る」だけでなく、
設計ミスや事故を早期に発見するためのチェックポイントでもあります。
表示が見づらいときのpsql便利設定
ページャを無効化する
件数が多いと less で止まる場合があります。
\pset pager off
表示形式を縦にする(詳細確認向け)
\x
SQLでデータベース一覧を取得する方法(pg_database)
SQLで取得するメリット
psqlの \l は非常に便利ですが、以下の用途ではSQLが適しています。
- 結果をCSVや監査資料に使いたい
- 特定条件で絞り込みたい
- 自動化・スクリプトから取得したい
- 可読性を自由に調整したい
pg_databaseとは
pg_database は、PostgreSQLのシステムカタログです。
データベース定義情報が格納されています。
公式ドキュメント:https://www.postgresql.org/docs/current/catalog-pg-database.html
データベース一覧を取得する基本SQL
SELECT
datname,
pg_encoding_to_char(encoding) AS encoding,
datcollate,
datctype
FROM pg_database;
可読性を上げるポイント
encodingは数値 → 文字列に変換- 不要な内部ID(OID)は出さない
これだけで、運用資料としてそのまま使える一覧になります。
データベース一覧を条件で絞り込む(実務編)
template0 / template1 を除外する
SELECT datname
FROM pg_database
WHERE datname
NOT IN ('template0', 'template1');
テンプレートDBは通常の運用対象外のため、
アプリ用DB確認では除外するのが定石です。
オーナー(所有者)で絞り込む
SELECT
d.datname,
r.rolname AS owner
FROM pg_database d
JOIN pg_roles r ON d.datdba = r.oid
WHERE r.rolname = 'appuser';
この使い方が役立つ場面
- チームごとのDB棚卸し
- 退職者ロールが残っていないかの確認
- 権限設計の見直し
「誰が責任を持つDBか」を可視化できるのは、
運用成熟度の高いチームの特徴です。
データベース一覧が表示できないときの原因と対処法
1. 接続先の取り違え(最頻出)
- ホスト・ポート違い
- Docker / ローカル / 本番の混同
⇒\conninfo で即確認
\conninfo
2. 権限不足
- 一覧は見えるが詳細が欠ける
- SQL結果が期待と違う
⇒運用ユーザーとアプリユーザーで結果が違うことは正常ケースもある
3. 実行環境の問題
- psqlが入っていない
- 認証方式(pg_hba.conf)で拒否されている
- ネットワーク未到達
⇒「接続 → 一覧 → 絞り込み」の順で段階切り分けが鉄則
よくある失敗と注意点
- 本番DBで作業していることに気づかない
- Collate / Ctype を後回しにして後悔
- DB名だけ見て安心してしまう
- オーナー不明のDBが増殖する
一覧確認は“作業”ではなく“安全装置”として捉えることが重要です。
まとめ:用途に応じて最適な方法を選ぶ
- 即時・目視確認 →
\l(\list) - 加工・絞り込み・自動化 →
pg_database + SQL - 想定外の結果 → 接続先 → 権限 → 環境の順で切り分け
データベース一覧の確認は地味ですが、
運用事故を未然に防ぐ最重要スキルのひとつです。
この分野に強いエンジニアチームで、一緒に働きませんか?
PostgreSQLのようなOSSを深く理解し、
「ただ動く」ではなく 安全・再現性・運用性まで考える。
そんなエンジニアリングに面白さを感じる方は、
きっと私たちのチームと相性が良いはずです。
- DB設計・運用に腰を据えて向き合いたい
- 現場で通用する知識を積み上げたい
- 技術的な議論を大切にする環境で働きたい
もしこの記事を読んで少しでも共感したなら、
ぜひ私たちのエンジニア採用ページも覗いてみてください。
同じ目線で技術を語れる仲間を探しています。
学んだSQLを、実務で使えるスキルにしたい方へ
本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。
SQLは、文法を理解するだけでなく、
- どんなデータ構造で使われるのか
- どんなクエリが現場で求められるのか
を意識して学ぶことで、実践力が大きく変わります。
そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode という選択肢もあります。
- SQLを含むWeb・データベース系スキルを体系的に学べる
- 未経験者でも実務を意識したカリキュラム
- 受講料・教材費がかからない完全無料の学習環境
- 完全オンラインでスキマ学習
※学習内容や進め方を確認するだけでもOKです