PostgreSQL - 显示数据库
PostgreSQL - 列出数据库
Section titled “PostgreSQL - 列出数据库”在 PostgreSQL 中,与 MySQL 等其他一些数据库系统不同,它没有直接的 SHOW DATABASES 命令。列出数据库通常是通过查询系统目录(system catalog)或使用客户端特定的元命令(meta-command)来完成的。PostgreSQL 在一组系统表(统称为系统目录)中维护着关于其状态和对象的丰富信息。
有两种主要方法可以列出所有可用的数据库:
- 使用 SQL
SELECT查询pg_database目录。 - 在
psql命令行客户端中使用元命令。
方法一:使用 SQL SELECT 查询
Section titled “方法一:使用 SQL SELECT 查询”最通用的方法是在任何 SQL 客户端中查询 pg_database 系统目录。此表包含集群中每个数据库的一行记录。
SELECT datname FROM pg_database;这个基本查询只返回数据库的名称。以下是示例输出:
datname----------- postgres template1 template0 my_app_db(4 rows)增强查询以获取更多详细信息
Section titled “增强查询以获取更多详细信息”要获取更多有用信息,您可以选择其他列。例如,您可以过滤掉通常不用于直接应用程序工作的模板数据库。
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_databaseWHERE datistemplate = false;此查询提供了您的非模板数据库的更丰富、更易读的概览。
方法二:使用 psql 元命令
Section titled “方法二:使用 psql 元命令”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)最佳实践与常见错误
Section titled “最佳实践与常见错误”何时使用哪种方法?
Section titled “何时使用哪种方法?”- 在开发或直接在服务器上进行管理时,使用
psql元命令(\l、\l+)进行快速交互式检查。 - 对于程序化访问,例如在应用程序、脚本或非
psql的数据库 GUI 中,请使用SELECT查询。
初学者常犯的一个错误是,尝试在通用 SQL 客户端或应用程序的数据库驱动程序中运行 psql 元命令(如 \l)。这些命令是 psql 工具专有的,在其他地方会导致语法错误。在非 psql 环境中,请始终使用 SELECT FROM pg_database 查询。