在psql环境中,如何查询并显示所有数据库的完整列表?

长按可调倍速

数据库的服务器和客户端在哪里以及所有的数据库的内容在哪里

psql显示所有数据库:命令详解与实用技巧

为何需要查看所有数据库

psql是PostgreSQL的交互式命令行工具,用于执行SQL语句、管理数据库及查看系统信息,在数据库管理场景中,查看当前服务器下的所有数据库是基础操作之一——无论是数据库迁移、备份、权限管理还是新库创建,都需要先了解数据库列表,本文将详细解析psql中用于显示所有数据库的命令及其参数,并提供进阶用法与常见问题解决方案。

在psql环境中,如何查询并显示所有数据库的完整列表?

基础命令:l的使用

在psql连接到数据库后,通过执行l命令可列出所有数据库,该命令等价于执行SQL语句SELECT datname FROM pg_database;,返回结果包含数据库名、所有者、编码等信息。

命令语法

psql -U username -d postgres
  • -U username:指定连接用户(默认为postgres)。
  • -d postgres:指定默认数据库(通常为postgres,用于初始化连接)。

执行示例

连接到数据库后,输入l并回车,输出如下:

                          List of databases
    Name    |  Owner   | Encoding |  Collate |   Ctype | Access privileges
------------+----------+----------+----------+---------+-----------------------
 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
(3 rows)
  • Name:数据库名称(如postgres、template0、template1)。
  • Owner:数据库所有者(默认为postgres)。
  • Encoding:数据库编码(如UTF8)。
  • Collate、Ctype:排序规则(通常与编码一致)。
  • Access privileges:访问权限(+| =c/postgres表示允许超级用户连接)。

关键点

  • 默认情况下,l会列出所有数据库(包括模板库template0和template1)。
  • 若未指定数据库连接,l会返回当前会话中可访问的所有数据库。

参数详解:l+与lG

l+:显示详细数据库信息

l+命令在l基础上增加了更多字段,包括创建时间、大小、是否为模板库等,其输出等价于执行SELECT * FROM pg_database;。

执行示例
l+

输出示例:

                          List of databases
    Name    |  Owner   | Encoding |  Collate |   Ctype |   Access privileges |  Encoding for binary data | Comments | Date created | Size
------------+----------+----------+----------+---------+---------------------+---------------------------+----------+-------------+------+
 postgres   | postgres | UTF8     | en_US.UTF-8| en_US.UTF-8| +| =c/postgres        | UTF8                      | 2025-01-01 12:00:00+00 | 10GB
 template0  | postgres | UTF8     | en_US.UTF-8| en_US.UTF-8| =c/postgres         | UTF8                      | 2025-01-01 12:00:00+00 | 10GB
 template1  | postgres | UTF8     | en_US.UTF-8| en_US.UTF-8| =c/postgres         | UTF8                      | 2025-01-01 12:00:00+00 | 10GB
(3 rows)
  • Date created:数据库创建时间。
  • Size:数据库大小(如10GB)。
  • Encoding for binary data:二进制数据编码(如UTF8)。

lG:分页显示

若数据库数量较多,l和l+的输出会连续显示,可通过lG分页查看,按Enter键翻页,按q键退出分页模式。

命令对比表

命令 输出字段 适用场景
l 数据库名、所有者、编码、排序规则、权限 快速查看数据库列表
l+ 增加创建时间、大小、二进制数据编码 需要详细信息的场景
lG 分页显示 数据库数量较多时

提示:l和l+均无需额外参数,直接在psql会话中执行即可。

在psql环境中,如何查询并显示所有数据库的完整列表?

进阶用法:筛选与结合其他命令

只显示当前用户拥有的数据库

若需筛选当前用户(如user1)拥有的数据库,可通过conninfo获取当前连接信息,结合SQL查询实现。

步骤
  1. 获取当前用户名:
    conninfo

    输出示例:

    Host: localhost
    Port: 5432
    Database: postgres
    User: user1
  2. 执行SQL查询:
    SELECT datname FROM pg_database WHERE datistemplate = false AND datowner = (SELECT uid FROM pg_user WHERE usename = current_user);
    • datistemplate = false:排除模板库(template0、template1)。
    • datowner = ...:筛选当前用户(user1)拥有的数据库。

结合d查看数据库结构

若需查看特定数据库(如mydb)的结构,可先执行l找到数据库名,然后连接该数据库并使用d命令。

示例
l
-- 找到数据库名(如mydb)
c mydb
d

d命令会列出mydb中的所有表、视图等信息。

使用list(注意区分)

list命令用于列出当前用户拥有的对象(如表、视图),而非数据库,若误用,需注意区分:

  • l:显示数据库列表。
  • list:显示当前用户拥有的对象列表。

常见问题与解决

问题1:l命令无输出或权限不足

原因
  • 未连接到正确的数据库(默认为postgres,但l会列出所有数据库,无需指定)。
  • 当前用户无查看所有数据库的权限(需超级用户权限)。
解决方案
  1. 确认连接数据库:
    psql -U username -d postgres
  2. 若需超级用户权限,使用-U postgres或sudo(Linux/macOS):
    sudo -u postgres psql
  3. 若权限不足,尝试切换到超级用户:
    c postgres

问题2:如何只显示非模板库?

原因

默认l会列出模板库(template0、template1),若仅需业务数据库,需过滤模板库。

在psql环境中,如何查询并显示所有数据库的完整列表?

解决方案
SELECT datname FROM pg_database WHERE datistemplate = false;
  • datistemplate = false:排除模板库(template0、template1)。

FAQs(常见问题解答)

问题1:如何只显示当前用户拥有的数据库?

解答:
使用conninfo获取当前用户名,结合SQL查询筛选:

SELECT datname FROM pg_database WHERE datistemplate = false AND datowner = (SELECT uid FROM pg_user WHERE usename = current_user);

问题2:在Windows系统中如何使用psql显示所有数据库?

解答:

  1. 确保已安装psql(通过PowerShell或命令提示符运行)。
  2. 连接到数据库:
    psql -U username -d postgres
  3. 执行l或l+查看数据库列表。

psql中显示所有数据库的核心命令是l和l+,前者快速列出基本信息,后者提供详细字段,通过结合conninfo和SQL查询,可进一步筛选当前用户拥有的数据库,掌握这些命令与技巧,能高效管理PostgreSQL数据库,提升运维效率。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/201497.html

赞 (0)
上一篇 2025年12月29日 05:40
下一篇 2025年12月29日 05:44

相关推荐

  • PHP负载均衡怎么做?健康检查如何配置?

    实施稳健的PHP负载均衡架构,核心在于将高效的流量分发算法与精准的实时健康检查机制深度融合,从而在保障高并发处理能力的同时,实现故障节点的自动剔除与无缝恢复,确保业务连续性与用户体验的极致稳定,对于基于PHP的Web应用而言,单纯的流量分担并不足以构建高可用系统,必须配合具备感知能力的健康检查策略,才能彻底解决……

    2026年3月4日
    02023
  • 域名服务器中DNS存放什么?DNS解析记录类型有哪些

    域名服务器中DNS中存放什么简单回答:DNS服务器中存放的是一张巨大的“电话簿”,里面记录着域名和IP地址的对应关系,以及控制邮件路由、网站验证等功能的各类解析记录, 这张电话簿不是静态的,它会随着互联网的变化实时更新,确保你输入网址后能精准地找到对应的服务器,它让互联网的“门牌号”(IP地址)与“姓名”(域名……

    2026年9月11日
    0574
  • 为什么ping网络不稳定?解决网络延迟的常见方法有哪些?

    当用户在电脑或设备上使用ping命令测试网络时,若发现返回的时间(ms)忽高忽低,或出现“请求超时”的情况,即表明网络存在不稳定问题(俗称“ping网络不稳定”),这类问题不仅会干扰日常上网(如网页加载缓慢、视频卡顿),更会影响游戏、视频会议等对延迟敏感的应用,给用户带来诸多困扰,本文系统分析ping网络不稳定……

    2026年1月31日
    01.1K0
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 我的世界服务器RPG什么意思,我的世界RPG服务器玩法有哪些?

    我的世界服务器RPG,简单说就是在Minecraft多人服务器里加入角色扮演玩法,玩家靠打怪、刷副本、做任务、升职业、攒装备来变强,而不是像原版生存那样只挖矿盖房, 如果你在搜“我的世界rpg服务器是什么意思”,说明你已经接触到这类服务器的入服宣传,但还没搞清它和普通服务器的区别,下面从概念、玩法、命令、手机版……

    2026年9月19日
    0741

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注