2.

MySQL / PostgreSQL / SQL Server / Oracle / SQLite のデータベース一覧確認コマンド

編集
この記事の要点
  • MySQL / MariaDB: SHOW DATABASES; または SELECT schema_name FROM information_schema.schemata;
  • PostgreSQL: psql で \l / \list、SQL は SELECT datname FROM pg_database;
  • SQL Server: SELECT name FROM sys.databases; または EXEC sp_databases;
  • Oracle: 「データベース」概念が異なる → スキーマ一覧SELECT username FROM dba_users;
  • SQLite: ファイル = 1 DB。.databases でアタッチ済一覧、PRAGMA database_list;
  • GUI: DBeaver / TablePlus / phpMyAdmin / pgAdmin / MySQL Workbench ですべて 1 クリック

MySQL / MariaDB

-- 基本コマンド
SHOW DATABASES;

-- 結果例
-- +--------------------+
-- | Database           |
-- +--------------------+
-- | information_schema |
-- | mysql              |
-- | performance_schema |
-- | sys                |
-- | myapp              |
-- +--------------------+

-- フィルタ
SHOW DATABASES LIKE 'app%';

-- information_schema 経由(標準 SQL に近い)
SELECT schema_name AS database_name
FROM   information_schema.schemata
ORDER  BY schema_name;

-- ユーザーがアクセス権を持つ DB のみ表示される(権限による)

-- 現在接続中の DB
SELECT DATABASE();

-- DB ごとのサイズ
SELECT  table_schema AS db,
        ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM    information_schema.tables
GROUP BY table_schema
ORDER BY size_mb DESC;

コマンドラインから:

# 一行クエリ
mysql -u root -p -e "SHOW DATABASES;"

# 特定の DB のテーブル一覧
mysql -u root -p mydb -e "SHOW TABLES;"

PostgreSQL

-- psql から
\l                          -- 一覧(簡易)
\l+                         -- 詳細(サイズ・オーナーなど)
\list

-- SQL クエリで
SELECT datname FROM pg_database WHERE datistemplate = false;

-- 詳細
SELECT  datname,
        pg_size_pretty(pg_database_size(datname)) AS size,
        pg_catalog.pg_get_userbyid(datdba)         AS owner
FROM    pg_database
WHERE   datistemplate = false
ORDER BY datname;

-- 現在接続中
SELECT current_database();

-- スキーマ一覧(テーブルがグループされる単位)
SELECT schema_name FROM information_schema.schemata;
\dn

-- 接続中の DB に変更
\c another_db

SQL Server

-- システムビュー
SELECT name, database_id, create_date
FROM   sys.databases
ORDER BY name;

-- 古典的なシステムストアド
EXEC sp_databases;

-- SSMS でも 「Databases」 ノードを展開すれば一覧

-- 詳細(サイズ・オーナー)
SELECT  d.name,
        SUM(mf.size) * 8 / 1024 AS size_mb,
        SUSER_SNAME(d.owner_sid) AS owner,
        d.state_desc
FROM    sys.databases d
JOIN    sys.master_files mf ON d.database_id = mf.database_id
GROUP BY d.name, d.owner_sid, d.state_desc;

-- 現在の DB
SELECT DB_NAME();

-- 切り替え
USE AdventureWorks;

Oracle

Oracle は「インスタンス内に複数 DB を持たない」モデルなので、他 RDBMS の「DB 一覧」に相当するのはスキーマ(ユーザー)一覧PDB(マルチテナント)一覧になります:

-- 現在の DB / インスタンス情報
SELECT name, dbid, created FROM v$database;
SELECT instance_name, host_name FROM v$instance;

-- スキーマ(ユーザー)一覧 — 他 RDBMS の「DB 一覧」に相当
SELECT username FROM dba_users ORDER BY username;
SELECT username FROM all_users ORDER BY username;

-- マルチテナント (CDB) の場合の PDB 一覧
SELECT name, open_mode FROM v$pdbs;

-- 現在のスキーマ
SELECT USER FROM dual;

-- 接続先 DB 名
SELECT sys_context('USERENV', 'DB_NAME')   AS db_name,
       sys_context('USERENV', 'CON_NAME')  AS pdb_name
FROM dual;

SQLite

SQLite はファイル = 1 つの DB なので「DB 一覧」という概念は限定的です:

-- sqlite3 シェルから
.databases
-- main: 現在開いているメイン DB
-- temp: 一時 DB

-- 添付 (ATTACH) した DB を含めて確認
PRAGMA database_list;
-- 0|main|/path/to/main.db
-- 1|temp|
-- 2|sub |/path/to/sub.db

-- 別 DB を添付して同時に扱う
ATTACH DATABASE '/path/to/other.db' AS otherdb;
SELECT * FROM otherdb.users;
DETACH DATABASE otherdb;

-- ファイル一覧で代用
-- $ ls -la *.db *.sqlite

GUI ツール

ツール対応 DB料金
DBeaver主要すべて (MySQL/PG/SQL Server/Oracle/SQLite/MongoDB 等)無料 (Community)
TablePlus主要すべて有料 / 制限付き無料
phpMyAdminMySQL / MariaDB無料 (Web)
pgAdminPostgreSQL無料
MySQL WorkbenchMySQL無料 (公式)
SSMSSQL Server無料 (公式)
SQL DeveloperOracle無料 (公式)

権限と可視性

注意点として、ユーザーに権限のない DB は一覧に出ないことがあります:

  • MySQL: SHOW DATABASES はそのユーザーが SHOW DATABASES 権限を持つか、何らかの権限を持つ DB しか表示しない
  • PostgreSQL: pg_database は全 DB が見えるが、CONNECT 権限がないと \c できない
  • SQL Server: sys.databases は権限のある DB のみ

FAQ

Q: SHOW DATABASES で見えるはずの DB が見えない
A: そのユーザーに権限がない。GRANT SELECT ON dbname.* TO 'user'@'%'; 等で付与するか、root で確認。

Q: PostgreSQL で「DB」と「スキーマ」が混乱する
A: PostgreSQL では DB > スキーマ > テーブルの階層。MySQL の「DB」は PostgreSQL の「スキーマ」に近い概念。

Q: 一覧に出ているがアクセスできない
A: 接続権限と読み取り権限は別。GRANT CONNECT ON DATABASEUSAGE ON SCHEMA を確認。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法