PostgreSQL是一个功能强大的开源数据库,但是用好它需要合适的工具。本文推荐了几款PostgreSQL 14下非常实用的工具,包括客户端工具、监控工具、性能分析工具、备份恢复工具、数据迁移工具等。每款工具都有详细的介绍和使用场景,帮助你提升数据库开发和运维的效率。如果你在用PostgreSQL,希望这些工具能帮到你。
一、为什么需要好的工具
先说说为什么需要好的工具。
PostgreSQL本身功能很强大,但是它的原生客户端psql是命令行工具,对于不熟悉命令行的人来说不太友好。而且数据库的运维工作很复杂,包括监控、性能分析、备份恢复、数据迁移等,这些工作光靠psql是不够的。
好的工具可以让你事半功倍。一个好的客户端工具可以让你更高效地写SQL、管理数据库;一个好的监控工具可以让你及时发现问题;一个好的性能分析工具可以帮你快速定位慢查询。
我用PostgreSQL已经有好几年了,试过很多工具,下面推荐的这些都是我觉得真正好用、能提升效率的工具。
二、客户端工具
1. DBeaver
DBeaver是我最常用的数据库客户端工具,免费开源,支持几乎所有的数据库,包括PostgreSQL、MySQL、Oracle、SQLite等。
DBeaver的功能非常全面:
- 可视化的数据库浏览器,可以查看表、视图、函数、触发器等
- 强大的SQL编辑器,支持语法高亮、自动补全、格式化
- 数据编辑功能,可以直接在界面上编辑数据
- ER图生成,可以自动生成表关系图
- 数据导入导出,支持多种格式
- 支持SSH隧道和SSL连接
DBeaver有社区版和企业版,社区版已经足够用了。它是Java开发的,跨平台,Windows、Mac、Linux都能用。
我最喜欢DBeaver的一点是它的SQL编辑器非常好用,自动补全很智能,格式化也很方便。而且它支持保存SQL脚本,管理常用的查询。
2. pgAdmin 4
pgAdmin是PostgreSQL官方的图形化管理工具,专门为PostgreSQL设计,对PostgreSQL的特性支持最好。
pgAdmin 4是最新版本,用Python和JavaScript开发,Web界面,可以在浏览器中使用。功能包括:
- 数据库对象的可视化管理
- SQL查询工具
- 性能仪表盘
- 备份恢复向导
- 维护操作(VACUUM、ANALYZE等)
pgAdmin的优势是和PostgreSQL结合最紧密,能管理PostgreSQL的所有特性,比如角色、权限、表空间、扩展等。如果你需要深入管理PostgreSQL,pgAdmin是最好的选择。
缺点是界面稍微有点复杂,新手可能需要一段时间适应。而且性能不如DBeaver流畅。
3. DataGrip
DataGrip是JetBrains出品的数据库IDE,和IntelliJ IDEA同一家公司。如果你用过JetBrains的产品,应该会喜欢DataGrip。
DataGrip的优势:
- 智能的SQL补全和重构
- 强大的代码导航和搜索
- 版本控制集成
- 数据库diff工具
- 支持多种数据库
DataGrip的SQL编辑体验是所有工具中最好的,补全非常智能,重构功能也很强大。如果你是开发者,每天要写很多SQL,DataGrip能大幅提升效率。
缺点是收费的,不过个人开发者可以买个人授权,不算太贵。而且JetBrains的产品经常打折。
三、监控工具
1. pgstatstatements
pgstatstatements是PostgreSQL官方的扩展,用来统计SQL语句的执行情况。虽然它是一个扩展而不是独立工具,但是它是监控PostgreSQL性能的基础。
启用之后,pgstatstatements会记录所有SQL语句的执行次数、总耗时、平均耗时、读取的块数等信息。通过查询这个视图,可以快速找到最慢的SQL语句。
常用查询:
SELECT query, calls, total_exec_time, mean_exec_time
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;这个扩展是每个PostgreSQL DBA都应该启用的,安装简单,但是作用巨大。
2. Prometheus + Grafana + postgres_exporter
这是目前最流行的PostgreSQL监控方案。postgres_exporter采集PostgreSQL的指标,Prometheus存储指标,Grafana展示仪表盘。
这套方案的优势:
- 开源免费
- 可以监控多个PostgreSQL实例
- Grafana有丰富的图表和告警功能
- 社区有很多现成的PostgreSQL监控仪表盘可以直接用
可以监控的指标包括:连接数、QPS、TPS、缓存命中率、慢查询、复制延迟、表大小、索引使用情况等。
搭建稍微有点复杂,但是一旦搭好了,用起来非常方便。而且这套方案不仅可以监控PostgreSQL,还可以监控服务器、应用等,是一个通用的监控方案。
3. pgHero
pgHero是一个轻量级的PostgreSQL监控工具,用Ruby开发,提供Web界面。它的特点是简单易用,不需要复杂的搭建。
pgHero可以监控:
- 查询性能(慢查询、查询频率)
- 索引使用情况(未使用的索引、重复索引)
- 表大小和增长趋势
- 连接数和锁
- 缓存命中率
pgHero适合中小型项目,不需要复杂的监控系统,快速部署就能用。对于个人项目或者小团队来说,pgHero足够用了。
四、性能分析工具
1. EXPLAIN ANALYZE + depesz
EXPLAIN ANALYZE是PostgreSQL自带的执行计划分析工具,可以查看SQL语句的执行计划和实际执行时间。但是它的输出是文本格式,不太直观。
depesz是一个在线的执行计划可视化工具,把EXPLAIN ANALYZE的输出粘贴进去,它会生成一个彩色的、可交互的执行计划图,让你一眼就能看到哪里慢。
使用方法:
- 在psql中执行
EXPLAIN (ANALYZE, BUFFERS) your_query; - 把输出复制到depesz.com
- 查看可视化的执行计划
这个工具是免费的,不需要注册,非常方便。我每次分析慢查询都会用它。
2. pgstatkcache
pgstatkcache是一个扩展,可以统计SQL语句的CPU和IO使用情况。pgstatstatements只能看到执行时间,但是pgstatkcache可以看到CPU时间、读IO、写IO等更详细的信息。
有了这些信息,你可以判断一个慢查询是CPU密集型还是IO密集型,从而采取不同的优化策略。
这个扩展需要安装额外的软件,但是配置不复杂,推荐在生产环境启用。
3. auto_explain
auto_explain是PostgreSQL自带的扩展,可以自动记录慢查询的执行计划。配置一个阈值,比如执行时间超过1秒的查询,自动把执行计划记录到日志中。
这样你不需要手动去EXPLAIN,系统会自动帮你记录所有慢查询的执行计划。事后分析日志就能找到问题。
配置参数:
shared_preload_libraries = 'auto_explain'
auto_explain.log_min_duration = 1000 # 超过1秒的查询记录执行计划
auto_explain.log_analyze = on
auto_explain.log_buffers = on这个扩展对于排查偶发的慢查询特别有用,因为你不可能一直盯着数据库。
五、备份恢复工具
1. pgdump / pgrestore
pgdump和pgrestore是PostgreSQL自带的备份恢复工具,虽然简单,但是非常可靠。
pgdump可以导出整个数据库或者单个表,支持多种格式(自定义、目录、tar、SQL)。pgrestore用来恢复pg_dump导出的备份。
优点:
- 官方自带,稳定可靠
- 支持在线备份,不需要停库
- 可以选择性恢复
缺点:
- 大数据库备份时间长
- 不能做增量备份
- 恢复时间也比较长
对于中小数据库,pg_dump完全够用了。建议每天做一次全量备份,保留最近几天的备份。
2. pgBackRest
pgBackRest是一个专业的PostgreSQL备份恢复工具,功能比pg_dump强大很多。
pgBackRest的特点:
- 支持全量、增量、差异备份
- 支持并行备份和恢复,速度快
- 内置压缩和加密
- 支持备份到本地、S3、Azure等
- 支持时间点恢复(PITR)
- 内置备份校验
对于大型数据库,pgBackRest是更好的选择。它的增量备份可以节省大量空间和时间,时间点恢复可以恢复到任意时刻。
配置稍微复杂一些,但是文档很详细,按照文档一步步来没问题。
3. WAL-G
WAL-G是另一个流行的PostgreSQL备份工具,用Go开发,性能很好。
WAL-G的特点:
- 支持全量和增量备份
- 支持WAL归档和时间点恢复
- 支持多种存储后端(S3、GCS、Azure等)
- 备份压缩率高
- 恢复速度快
WAL-G和pgBackRest功能类似,都是专业级的备份工具。选择哪个看个人喜好,两个都很成熟。
六、数据迁移工具
1. pgloader
pgloader是一个数据迁移工具,可以从MySQL、SQLite、SQL Server等数据库迁移数据到PostgreSQL。
pgloader的特点:
- 自动转换数据类型
- 支持在线迁移,不需要停源库
- 迁移速度快,支持并行
- 可以在迁移过程中转换数据
如果你想从其他数据库迁移到PostgreSQL,pgloader是最好的选择。它可以大大减少迁移的工作量,很多转换都是自动的。
2. ora2pg
ora2pg是专门从Oracle迁移到PostgreSQL的工具。它可以迁移表结构、数据、存储过程、触发器、视图等几乎所有的数据库对象。
ora2pg的功能很强大,但是Oracle和PostgreSQL的差异比较大,迁移之后通常还需要一些手动调整。不过ora2pg已经帮你做了80%的工作,剩下的20%手动处理就好。
如果你在做Oracle到PostgreSQL的迁移,ora2pg是必备工具。
七、其他实用工具
1. psql的高级用法
psql虽然是命令行工具,但是功能非常强大。掌握一些高级用法可以大幅提升效率:
\x:切换到扩展显示模式,查看宽表很方便\timing:显示查询执行时间\e:在编辑器中编辑当前查询\watch:每隔一段时间重复执行查询,监控变化\copy:快速导入导出数据\d+:查看表的详细信息,包括大小和注释
花点时间学习psql的高级用法,会让你在没有图形化工具的时候也能高效工作。
2. pgbadger
pgbadger是一个PostgreSQL日志分析工具,可以把PostgreSQL的日志转换成漂亮的HTML报告。
报告内容包括:
- 连接统计
- 查询统计(最频繁、最慢的查询)
- 等待事件
- 锁等待
- 错误和警告
- 检查点统计
如果你开启了logstatement或者autoexplain,pgbadger可以帮你从海量日志中提取有用的信息,生成直观的报告。
3. pg_repack
pg_repack是一个在线整理表和索引的工具,可以消除表膨胀、重建索引,而且不需要锁表,在线操作。
PostgreSQL在大量更新删除之后会产生表膨胀,占用过多磁盘空间,影响查询性能。VACUUM FULL可以回收空间,但是会锁表。pg_repack可以在线完成同样的工作,不影响业务。
对于有大量更新删除的表,定期用pg_repack整理一下,可以显著提升性能。
八、工具选择建议
这么多工具,怎么选呢?这里给一些建议。
开发阶段:
- 客户端:DBeaver(免费)或者DataGrip(付费但好用)
- 性能分析:EXPLAIN ANALYZE + depesz
- 简单监控:pgstatstatements
生产环境:
- 监控:Prometheus + Grafana + postgres_exporter
- 备份:pg_dump(小库)或者pgBackRest(大库)
- 慢查询:auto_explain + pgbadger
- 表维护:pg_repack
数据迁移:
- MySQL到PG:pgloader
- Oracle到PG:ora2pg
不需要把所有工具都装上,根据自己的需求选择合适的就好。工具是为了提升效率,不是为了折腾。
九、写在最后
PostgreSQL是一个强大的数据库,但是好马配好鞍,合适的工具能让你发挥出它的全部能力。
本文推荐的这些工具,都是我亲测好用的。从客户端到监控,从性能分析到备份恢复,覆盖了PostgreSQL使用的方方面面。
当然,工具只是辅助,最重要的还是理解PostgreSQL的原理,掌握SQL和数据库设计的基本功。工具能帮你提高效率,但是不能代替你的思考。
如果你有其他好用的PostgreSQL工具,欢迎在评论区分享。大家一起交流,共同进步。
最后用一句话结束本文:"工欲善其事,必先利其器。"希望这些工具能帮你更高效地使用PostgreSQL,少加班,多摸鱼。
评论(0)
暂无评论,快来抢沙发~
评论功能仅对会员开放,请先登录
登录