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的输出粘贴进去,它会生成一个彩色的、可交互的执行计划图,让你一眼就能看到哪里慢。

使用方法:

  1. 在psql中执行EXPLAIN (ANALYZE, BUFFERS) your_query;
  2. 把输出复制到depesz.com
  3. 查看可视化的执行计划

这个工具是免费的,不需要注册,非常方便。我每次分析慢查询都会用它。

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,少加班,多摸鱼。