Skip to content

PostgreSQL - 显示数据库

在 PostgreSQL 中,与 MySQL 等其他一些数据库系统不同,它没有直接的 SHOW DATABASES 命令。列出数据库通常是通过查询系统目录(system catalog)或使用客户端特定的元命令(meta-command)来完成的。PostgreSQL 在一组系统表(统称为系统目录)中维护着关于其状态和对象的丰富信息。

有两种主要方法可以列出所有可用的数据库:

  • 使用 SQL SELECT 查询 pg_database 目录。
  • 在 psql 命令行客户端中使用元命令。

最通用的方法是在任何 SQL 客户端中查询 pg_database 系统目录。此表包含集群中每个数据库的一行记录。

SELECT datname FROM pg_database;

这个基本查询只返回数据库的名称。以下是示例输出:

datname
-----------
postgres
template1
template0
my_app_db
(4 rows)

要获取更多有用信息,您可以选择其他列。例如,您可以过滤掉通常不用于直接应用程序工作的模板数据库。

SELECT
datname AS "Database Name",
pg_catalog.pg_get_userbyid(datdba) AS "Owner",
pg_encoding_to_char(encoding) AS "Encoding",
datcollate AS "Collate",
datctype AS "Ctype",
pg_catalog.pg_size_pretty(pg_catalog.pg_database_size(datname)) AS "Size"
FROM pg_catalog.pg_database
WHERE datistemplate = false;

此查询提供了您的非模板数据库的更丰富、更易读的概览。

psql 是 PostgreSQL 的官方交互式终端。它提供了方便的元命令(以反斜杠 “ 为前缀),用于执行管理任务。这些命令是更长 SQL 查询的快捷方式。

要在 psql 会话中列出数据库,您可以使用:

\l

或者,要获取包含数据库大小和描述的更详细视图:

\l+

首先,使用 psql 连接到您的 PostgreSQL 服务器。系统将提示您输入密码。

psql -U postgres

连接后,运行 \l 命令:

postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-------------------
my_app_db | my_user | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres ...
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres ...
(4 rows)
  • 在开发或直接在服务器上进行管理时,使用 psql 元命令(\l、\l+)进行快速交互式检查。
  • 对于程序化访问,例如在应用程序、脚本或非 psql 的数据库 GUI 中,请使用 SELECT 查询。

初学者常犯的一个错误是,尝试在通用 SQL 客户端或应用程序的数据库驱动程序中运行 psql 元命令(如 \l)。这些命令是 psql 工具专有的,在其他地方会导致语法错误。在非 psql 环境中,请始终使用 SELECT FROM pg_database 查询。