Skip to content

pgAdmin(官方 GUI) ​

pgAdmin 是 PostgreSQL 官方社区维护的图形化管理工具(Graphical User Interface),也是 PostgreSQL 发行版中最广泛使用的桌面客户端。本节将介绍 pgAdmin 4 的三种部署形态、服务器注册流程、核心功能面板、ERD 设计工具与备份还原向导,并客观分析其优缺点。

前置知识

阅读本节前,建议先了解:psql 命令行详解

基础概念 ​

pgAdmin 4 是当前维护的主线版本,与早期的 pgAdmin 3 有本质区别:pgAdmin 4 采用「桌面应用 + 内置 Python Web 服务」的混合架构,界面本质是一个在本地运行的 Web 应用(基于 React),通过内置的 Web 服务器与 PostgreSQL 通信。这种架构带来三个直接结果:

  • 同一个界面既能以桌面模式运行,也能以服务器(Web)模式部署供团队共用
  • 可以部署在容器中,通过浏览器访问
  • 「注册服务器(Register Server)」是使用前的必需步骤,它保存的是连接配置,而不是建立数据库本身
概念英文名说明
服务器组Server Group用于对已注册的服务器分组管理,仅本地逻辑概念
服务器注册Register Server保存主机、端口、用户、密码等连接信息
对象浏览器Object Browser左侧树形导航,可下钻到列、索引、约束层级
查询工具Query Tool主要的 SQL 编辑器与结果查看器
仪表盘Dashboard实时性能图表与会话列表

安装与配置 ​

三种部署方式对比 ​

部署方式适用场景优点缺点
桌面版(Desktop)个人开发开箱即用、无需服务单机、配置不共享
Web 版(Server)团队共用集中部署、配置共享、可配 LDAP 登录需维护 Web 服务与反向代理
Docker快速试用、CI一条命令启动、环境干净需自行挂载持久化卷
bash
# 方式一:macOS 桌面版
brew install --cask pgadmin4

# 方式二:Debian / Ubuntu 官方软件源(含 pgAdmin 4)
sudo apt install -y pgadmin4

# 方式三:Docker(Web 模式,推荐用于团队共享)
docker run -d \
  --name pgadmin4 \
  -p 5050:80 \
  -e 'PGADMIN_DEFAULT_EMAIL=admin@example.com' \
  -e 'PGADMIN_DEFAULT_PASSWORD=ChangeMe_Strong1' \
  -e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
  -v pgadmin_data:/var/lib/pgadmin \
  dpage/pgadmin4:latest

# 管理容器
docker logs -f pgadmin4
docker restart pgadmin4

注册服务器 ​

桌面版首次启动需设置主密码(Master Password),用于加密本地保存的数据库密码。之后右键「Servers → Register → Server」填写连接信息。

通用(General)标签页关键字段:

字段建议值说明
Namedemo-prod业务可识别的名称,含环境后缀
Server GroupProduction分组便于多环境切换
Connect now?关闭先保存,确认配置无误再连接

连接(Connection)标签页关键字段:

text
Host name/address : 127.0.0.1
Port              : 5432
Maintenance database : postgres
Username          : app_user
Password          : ********       [x] Save password
Role              : (留空,使用 Username 同名角色)
Service           : (留空,或使用 pg_service.conf 中的服务名)

SSL 标签页:

text
SSL mode      : require            # 生产环境至少 require
Client certificate : /home/app/.postgresql/postgresql.crt
Client key         : /home/app/.postgresql/postgresql.key
Root certificate   : /home/app/.postgresql/root.crt
Certificate revocation list : (可选)

高级(Advanced)标签页值得注意的选项:

text
DB restriction     : demo,analytics   # 只显示指定数据库,避免误操作其他库
Connect timeout    : 10               # 秒
Application name   : pgadmin-desktop  # 便于在 pg_stat_activity 中区分

也可以直接使用连接字符串(Connection 标签页不填,改用 Advanced 或 DSN 导入):

text
postgresql://app_user@127.0.0.1:5432/demo?sslmode=require&application_name=pgadmin

详细说明 ​

对象浏览器(Object Browser) ​

对象浏览器是左侧的主导航树,层级结构与数据库对象模型一一对应:

text
Servers
└── demo-prod (PostgreSQL 18.0)
    └── Databases
        ├── postgres
        └── demo
            └── Schemas
                ├── public
                │   ├── Tables
                │   │   └── users
                │   │       ├── Columns
                │   │       ├── Constraints
                │   │       ├── Indexes
                │   │       ├── Triggers
                │   │       └── Rules
                │   ├── Views
                │   ├── Materialized Views
                │   ├── Functions
                │   ├── Sequences
                │   └── Types
                ├── pg_catalog(系统模式)
                └── information_schema(标准信息模式)

右键任意对象可获得上下文操作菜单,其中最实用的几项:

  • View/Edit Data:以可编辑表格方式查看前 100 行或自定义过滤条件
  • Query Tool:打开时自动注入当前对象的 SELECT 模板
  • Properties:查看 DDL 定义与统计信息
  • Statistics:查看该对象的统计信息(依赖 ANALYZE 已执行)

查询工具(Query Tool) ​

查询工具是 pgAdmin 使用频率最高的面板,核心快捷键与能力:

快捷键功能
F5执行全部内容
Ctrl/Cmd + Enter执行光标所在语句或选中内容
Shift + Ctrl/Cmd + Enter执行并下载结果为 CSV
F7查看执行计划(EXPLAIN)
Shift + F7查看实际执行计划(EXPLAIN ANALYZE)
Ctrl/Cmd + S保存 SQL 到文件
Alt/Option + /注释/取消注释选中行
sql
-- 在查询工具中执行:基础聚合示例
SELECT channel,
       count(*)                AS order_cnt,
       round(sum(amount), 2)   AS total_amount
FROM orders
WHERE created_at >= now() - interval '7 days'
GROUP BY channel
ORDER BY total_amount DESC;
text
-- 结果网格(Data Output)
channel | order_cnt | total_amount
--------+-----------+--------------
web     |     18432 |    2983412.50
app     |     12078 |    1742006.00
pos     |      3201 |     482100.00

查询工具的结果区支持:文字网格(Text Grid)、编辑网格(Edit Grid,可直接改数据)、图形化执行计划(Graphical Explain)、几何查看器(Geometry Viewer,需 PostGIS)。

仪表盘(Dashboard) ​

仪表盘提供开箱即用的实时监控,无需安装扩展,但部分深度指标依赖 pg_stat_statements:

图表数据来源关注点
Server sessionspg_stat_activity会话数是否接近上限
Transactions per secondpg_stat_database事务吞吐趋势
Tuples in / outpg_stat_database读写比例
Block I/Opg_statio_*缓存命中是否下降
Index vs Seq Scanspg_stat_user_tables是否存在缺失索引
Database sizepg_database_size()容量增长速率
sql
-- 启用语句统计扩展后,仪表盘可展示 Top 慢查询
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;

-- 手工核对仪表盘数据源:当前活动会话
SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state;
text
    state     | count
--------------+-------
 active       |     3
 idle         |    27
 idle in transaction | 2

idle in transaction 长时间不退出的会话是典型隐患,它会阻塞真空(VACUUM)回收死元组,仪表盘上出现这类会话应立即排查应用的事务边界。

ERD 工具 ​

pgAdmin 4 内置实体关系图(Entity-Relationship Diagram, ERD)工具,可对已有表反向生成 ER 图:

text
操作路径:
  1. 右键数据库或模式 → ERD For Database / ERD For Schema
  2. 生成的图自动布局,可拖拽调整
  3. 工具栏可切换「显示数据类型 / 显示约束」等信息密度
  4. File → Save Image 导出 PNG / SVG,用于设计评审文档

需要注意的是,pgAdmin 的 ERD 是只读的可视化,无法像专业建模工具那样从图反向生成 DDL。若需要双向工程(Forward/Reverse Engineering),应改用 DBeaver 或 DataGrip。

备份与还原向导 ​

pgAdmin 通过调用 pg_dump / pg_restore / pg_dumpall 二进制完成备份还原,本质是图形化的命令行封装。

text
右键数据库 → Backup...(备份)
   Filename        : /backup/demo_20260921.dump
   Format          : Custom            # 可选 Plain / Directory / Tar / Custom
   Compression ratio : 6
   Encoding        : UTF8
   [x] Include CREATE DATABASE statement
   [x] Include DROP DATABASE statement (谨慎勾选)
   [x] Clean before restore (谨慎勾选)

右键数据库 → Restore...(还原)
   Format          : Custom or Tar
   [x] Data / [x] Schema Only ...
   Number of jobs  : 4                 # 仅 Directory 格式支持并行

三种格式的差异必须理解,否则容易在还原时报错:

格式备份命令产物还原方式特点
PlainSQL 文本psql -f可读可手工修改,不能并行
Custom压缩归档pg_restore支持选择性还原、支持并行
Directory目录(多文件)pg_restore -j支持并行,适合大库
Tartar 归档pg_restore兼容性好,但不支持压缩
bash
# 等价的命令行操作:与向导生成的参数一一对应
pg_dump -h 127.0.0.1 -U app_user -d demo \
  --format=custom --compress=6 \
  --file=/backup/demo_20260921.dump

# 还原:只还原 schema,忽略数据
pg_restore -h 127.0.0.1 -U app_user -d demo_new \
  --schema-only --no-owner --no-privileges \
  /backup/demo_20260921.dump

权限要求

pgAdmin 只是命令行工具的图形外壳,因此备份还原能否成功取决于数据库角色权限,而非 pgAdmin 设置。非超级用户执行 pg_dumpall 会失败;跨库备份需要在 pg_hba.conf 中对该用户开放相应数据库的访问。

实战示例 ​

场景:团队需要一套共享的可视化数据库管理平台,运维与开发都能使用,且不暴露数据库密码。

bash
# 1) 部署 pgAdmin Web 版,配置持久化卷与反向代理前置
docker run -d \
  --name pgadmin4 \
  --restart unless-stopped \
  -p 127.0.0.1:5050:80 \
  -e 'PGADMIN_DEFAULT_EMAIL=admin@example.com' \
  -e 'PGADMIN_DEFAULT_PASSWORD=ChangeMe_Strong1' \
  -e 'PGADMIN_CONFIG_SERVER_MODE=True' \
  -e 'PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED=True' \
  -e 'PGADMIN_CONFIG_ENHANCED_COOKIE_PROTECTION=True' \
  -v pgadmin_data:/var/lib/pgadmin \
  dpage/pgadmin4:latest

# 2) 确认服务已就绪
docker ps --filter name=pgadmin4 --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
text
NAMES      STATUS                   PORTS
pgadmin4   Up 12 seconds (healthy)  127.0.0.1:5050->80/tcp
bash
# 3) 浏览器访问 http://127.0.0.1:5050/ ,登录后注册服务器
#    Name     : demo-prod
#    Host     : db.internal
#    Port     : 5432
#    Database : postgres
#    Username : app_user
#    SSL mode : require      (生产环境务必开启)
#    Save password : 不勾选(每次输入,避免密码落盘到共享实例)

登录后在查询工具中执行一次演练,验证端到端可用:

sql
-- 确认已连到正确的库与角色
SELECT current_database() AS db,
       current_user      AS role,
       inet_server_addr() AS server_ip;

-- 确认 SSL 已启用(生产环境应返回 t 或 on)
SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid();
text
   db  |   role   | server_ip | ssl
-------+----------+-----------+-----
 demo  | app_user | 10.0.3.21 | t

注意事项 ​

  • 别用 postgres 超级用户日常操作:pgAdmin 的便利性容易让人长期使用超级用户连接,一旦凭证泄漏后果严重。生产环境应按业务域创建独立角色。
  • 桌面版的「主密码」不可找回:忘记主密码只能删除配置目录重置,已保存的服务器连接信息全部丢失。
  • 不要在共享 Web 实例上勾选「Save password」:多人共用一个 pgAdmin 实例时,保存的密码对该实例的所有管理会话可见。
  • Docker 未挂载卷等于数据易失:docker rm 后所有服务器注册信息与查询历史都会丢失,务必挂载 /var/lib/pgadmin。
bash
# 错误!未挂载持久化卷,容器删除即配置全丢
docker run -d -p 5050:80 -e PGADMIN_DEFAULT_EMAIL=admin@example.com dpage/pgadmin4

# 正确做法
docker run -d -p 127.0.0.1:5050:80 \
  -v pgadmin_data:/var/lib/pgadmin \
  -e PGADMIN_DEFAULT_EMAIL=admin@example.com \
  -e PGADMIN_DEFAULT_PASSWORD=ChangeMe_Strong1 \
  dpage/pgadmin4:latest
  • 备份向导生成的文件在容器内:Web 模式下的 /backup/... 路径是容器内路径,需要额外挂载卷才能取到宿主机。
bash
# 正确做法:把备份目录也挂载出来
docker run -d --name pgadmin4 \
  -v pgadmin_data:/var/lib/pgadmin \
  -v /data/pgbackup:/backup \
  dpage/pgadmin4:latest
  • Include DROP DATABASE statement 是高危选项:还原时若指向已存在的生产库会先删库,务必在确认目标实例后再勾选。
  • 大结果集不要用 Edit Grid:编辑网格会把结果全量加载进浏览器内存,百万行级查询请用查询工具 + 分页。
  • 版本兼容性:pgAdmin 4 新版可管理旧版 PostgreSQL,但反向不成立。建议 pgAdmin 版本 ≥ 服务端主版本。

最佳实践 ​

  • 服务器命名规范:{项目}-{环境},如 demo-prod、demo-staging、demo-dev,并配合服务器组按环境隔离,降低误连生产库的概率。
  • 用 DB restriction 限定可见库:避免在只读账号的界面上看到其他业务库而误发 DDL。
  • 优先 Custom 格式做备份:支持选择性还原(只还原某张表)与并行还原,灵活性远高于 Plain。
  • 查询工具里的事件触发器式习惯:执行破坏性语句前先 BEGIN; 再执行,确认行数无误后 COMMIT;,pgAdmin 不会替你回滚。
  • 生产环境统一走 SSL:SSL mode 至少 require,有证书链时用 verify-full 并配置根证书。
  • 把 pgAdmin 作为辅助而非唯一手段:生产排障最终仍要看 pg_stat_activity、日志文件与 psql,不要把图形界面当唯一入口。

下一节

继续学习:DBeaver

参考链接 ​