Psql查看数据库列表
Psql简介
Psql是PostgreSQL数据库的交互式命令行客户端,支持SQL执行、事务管理及数据库对象操作,查看数据库列表是Psql的基础功能之一,用于确认当前连接环境中的所有数据库,是数据库管理和操作的前提步骤,通过Psql查看数据库列表,可快速了解数据库名称、所有者、状态等核心信息,为后续操作(如选择特定数据库、创建新数据库或删除数据库)提供依据。

连接Psql
在使用Psql查看数据库列表前,需先连接到PostgreSQL服务器,基本连接命令格式如下:
psql -U 用户名 -d 数据库名 -h 主机地址 -p 端口
- -U 用户名:指定连接用户,默认为当前系统用户;
- -d 数据库名:连接目标数据库(若未指定,默认连接当前用户的主数据库);
- -h 主机地址:服务器IP或主机名(默认为本地);
- -p 端口:PostgreSQL默认端口为5432(可省略)。
以用户postgres连接本地默认端口:
psql -U postgres
若未指定数据库,Psql会自动连接当前用户的主数据库(如postgres)。
查看数据库列表的方法
Psql提供了多种命令查看数据库列表,不同命令的输出内容、详细程度存在差异,以下是常用方法及说明:
1 基本命令:l
l是最常用的数据库列表命令,输出包含数据库名、所有者、编码、排序规则等基本信息。
l
输出示例:
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
mydb | admin | 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)字段说明:
- Name:数据库名称;
- Owner:数据库所有者;
- Encoding:数据库编码(如UTF8);
- Collate/Ctype:排序规则和类型;
- Access privileges:访问权限(如
=c/postgres表示当前用户对数据库的所有者有完全控制权限)。
2 详细命令:l+
l+是l的增强版,输出更详细的数据库信息,包括创建时间、大小、表空间等。
l+
输出示例:
List of databases
Name | Owner | Encoding | Collate | Ctype | Encoding for default transaction | Date created | Size | Tablespace | Access privileges
-----------+----------+----------+-------------+-------------+-------------------------------+--------------+------+------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | UTF8 | 2025-01-01 | 8192 | main |
mydb | admin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | UTF8 | 2025-05-15 | 20480| main |
template0| postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | UTF8 | 2025-01-01 | 8192 | main | =c/postgres
template1| postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | UTF8 | 2025-01-01 | 8192 | main | =c/postgres
(4 rows)新增字段:
- Date created:数据库创建时间;
- Size:数据库大小(以字节为单位);
- Tablespace:数据库存储的表空间(默认为
main); - Encoding for default transaction:默认事务的编码(与
Encoding一致)。
3 其他命令:list
在某些PostgreSQL版本中,list是l+的别名,功能完全相同,若l+不可用,可尝试list。

list
输出与l+一致,此处不再赘述。
4 高级用法:筛选与查询
4.1 筛选特定数据库
若需查看特定数据库(如仅显示用户admin拥有的数据库),可使用-U选项:
l -U admin
输出仅包含admin用户拥有的数据库(如mydb)。
4.2 查看模板数据库
PostgreSQL有template0和template1两个模板数据库,用于创建新数据库,若需单独查看模板数据库,可使用-t选项:
l -t template
输出仅包含模板数据库(如template0、template1)。
4.3 使用SQL查询
Psql支持执行SQL语句,可通过SELECT查询数据库信息,获取所有非模板数据库的列表:
SELECT datname FROM pg_database WHERE datistemplate = false;
输出:
datname
mydb
(1 row)若需查看数据库大小(以易读格式),可结合pg_size_pretty()函数:
SELECT datname, pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database WHERE datistemplate = false;
输出:
datname | size
----------+------
mydb | 20 MB
(1 row)| 命令 | 适用场景 | |
|---|---|---|
| l | 基本列表(数据库名、所有者、编码等) | 快速查看数据库基本信息 |
| l+ | 详细列表(创建时间、大小、表空间等) | 需了解数据库详细信息时 |
| list | 与l+功能相同 | 旧版本或别名使用 |
| l -U 用户名 | 筛选指定用户拥有的数据库 | 权限管理或特定用户操作 |
| l -t 模板名 | 筛选模板数据库 | 模板数据库维护 |
| SQL查询 | 自定义数据库列表 | 需复杂筛选或统计时 |
常见问题与技巧
1 如何查看当前连接的数据库?
若需确认当前连接的数据库,可通过c 数据库名切换数据库,或使用conninfo命令查看连接信息:
conninfo
输出示例:

You are connected to database "mydb" as user "admin" via socket "/var/run/postgresql/.s.PGSQL.5432" at port "5432".执行SQL语句SELECT current_database();也可获取当前数据库名:
SELECT current_database();
输出:
current_database
mydb
(1 row)2 如何查看数据库的详细信息(如大小、创建时间)?
若需更详细的数据库信息(如大小、创建时间),推荐使用l+命令,其输出已包含核心字段,若需通过SQL查询,可使用以下语句:
SELECT datname, datcreated, pg_database_size(datname) AS size FROM pg_database WHERE datistemplate = false;
输出:
datname | datcreated | size
----------+------------+-------
mydb | 2025-05-15 | 20 MB
(1 row)3 权限问题处理
若当前用户没有查看所有数据库的权限(如普通用户仅能查看自己拥有的数据库),l命令会仅输出该用户拥有的数据库,此时需使用超级用户(如postgres)连接:
psql -U postgres
超级用户拥有查看所有数据库的权限,可执行l获取完整列表。
FAQs
如何查看当前连接的数据库?
解答:
- 使用
conninfo命令查看连接信息; - 执行SQL语句
SELECT current_database();获取当前数据库名。
如何查看数据库的详细信息(如大小、创建时间)?
解答:
- 使用
l+命令(输出包含创建时间、大小等字段); - 执行SQL查询
SELECT datname, datcreated, pg_database_size(datname) AS size FROM pg_database WHERE datistemplate = false;获取自定义信息。
通过以上方法,可高效使用Psql查看数据库列表,并掌握相关操作技巧,为PostgreSQL数据库管理提供基础支持。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/201409.html
