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 | 一条命令启动、环境干净 | 需自行挂载持久化卷 |
# 方式一: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)标签页关键字段:
| 字段 | 建议值 | 说明 |
|---|---|---|
| Name | demo-prod | 业务可识别的名称,含环境后缀 |
| Server Group | Production | 分组便于多环境切换 |
| Connect now? | 关闭 | 先保存,确认配置无误再连接 |
连接(Connection)标签页关键字段:
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 标签页:
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)标签页值得注意的选项:
DB restriction : demo,analytics # 只显示指定数据库,避免误操作其他库
Connect timeout : 10 # 秒
Application name : pgadmin-desktop # 便于在 pg_stat_activity 中区分也可以直接使用连接字符串(Connection 标签页不填,改用 Advanced 或 DSN 导入):
postgresql://app_user@127.0.0.1:5432/demo?sslmode=require&application_name=pgadmin详细说明
对象浏览器(Object Browser)
对象浏览器是左侧的主导航树,层级结构与数据库对象模型一一对应:
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 + / | 注释/取消注释选中行 |
-- 在查询工具中执行:基础聚合示例
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;-- 结果网格(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 sessions | pg_stat_activity | 会话数是否接近上限 |
| Transactions per second | pg_stat_database | 事务吞吐趋势 |
| Tuples in / out | pg_stat_database | 读写比例 |
| Block I/O | pg_statio_* | 缓存命中是否下降 |
| Index vs Seq Scans | pg_stat_user_tables | 是否存在缺失索引 |
| Database size | pg_database_size() | 容量增长速率 |
-- 启用语句统计扩展后,仪表盘可展示 Top 慢查询
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
-- 手工核对仪表盘数据源:当前活动会话
SELECT state, count(*)
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY state; state | count
--------------+-------
active | 3
idle | 27
idle in transaction | 2idle in transaction 长时间不退出的会话是典型隐患,它会阻塞真空(VACUUM)回收死元组,仪表盘上出现这类会话应立即排查应用的事务边界。
ERD 工具
pgAdmin 4 内置实体关系图(Entity-Relationship Diagram, ERD)工具,可对已有表反向生成 ER 图:
操作路径:
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 二进制完成备份还原,本质是图形化的命令行封装。
右键数据库 → 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 格式支持并行三种格式的差异必须理解,否则容易在还原时报错:
| 格式 | 备份命令产物 | 还原方式 | 特点 |
|---|---|---|---|
| Plain | SQL 文本 | psql -f | 可读可手工修改,不能并行 |
| Custom | 压缩归档 | pg_restore | 支持选择性还原、支持并行 |
| Directory | 目录(多文件) | pg_restore -j | 支持并行,适合大库 |
| Tar | tar 归档 | pg_restore | 兼容性好,但不支持压缩 |
# 等价的命令行操作:与向导生成的参数一一对应
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 中对该用户开放相应数据库的访问。
实战示例
场景:团队需要一套共享的可视化数据库管理平台,运维与开发都能使用,且不暴露数据库密码。
# 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}}'NAMES STATUS PORTS
pgadmin4 Up 12 seconds (healthy) 127.0.0.1:5050->80/tcp# 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 : 不勾选(每次输入,避免密码落盘到共享实例)登录后在查询工具中执行一次演练,验证端到端可用:
-- 确认已连到正确的库与角色
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(); 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。
# 错误!未挂载持久化卷,容器删除即配置全丢
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/...路径是容器内路径,需要额外挂载卷才能取到宿主机。
# 正确做法:把备份目录也挂载出来
docker run -d --name pgadmin4 \
-v pgadmin_data:/var/lib/pgadmin \
-v /data/pgbackup:/backup \
dpage/pgadmin4:latestInclude 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