首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PostgreSQL 19 即将预发, 最值得期待的特性一览

PostgreSQL 19 即将预发, 最值得期待的特性一览

作者头像
用户4035096
发布2026-07-10 09:28:15
发布2026-07-10 09:28:15
1240
举报

PostgreSQL 19 即将冻结特性, 进入beta阶段,我分析了2700多个commit后,精选出 18 个"真香"特性。

如果说 PostgreSQL 18 是稳扎稳打的一代,那 19 就是让运维和开发者"尖叫"的一代 —— 零停机 REPACK终于来了,autovacuum 终于学会并行干活了,外键检查直接快 1.8 倍,还有能让前段同学少写一堆代码的 COPY JSON...

我们直接开始。


一、零停机运维:这几个特性值一套年卡

1. REPACK CONCURRENTLY——终于不用半夜停机了

痛点:以前 REPACK 需要 AccessExclusiveLock,意味着锁表期间业务中断。 DBA 只能在凌晨业务低峰期熬夜操作。

PostgreSQL 19:现在支持 CONCURRENTLY 选项,REPACK 期间业务正常访问。

代码语言:javascript
复制
-- 索引重建,业务照常运行
REPACK INDEX CONCURRENTLY ON my_table;

MVCC 快照 + 逻辑解码保驾护航,零停机不是梦。


2. Autovacuum 学会"并行干活"了

痛点:历史原因 autovacuum 始终禁用并行 vacuum,大表 vacuum 吭哧吭哧要很久,膨胀风险居高不下。

PostgreSQL 19:解除封印,autovacuum 也能用并行 workers 了。

代码语言:javascript
复制
SET autovacuum_max_parallel_workers = 4;

和手动 VACUUM 一样的并行索引清理能力,autovacuum 自此真正智能化。


3. Autovacuum 表优先级机制——谁急谁先来

痛点:autovacuum 以前按"发现顺序"处理表,结果急表等死,非急表占着资源。

PostgreSQL 19:引入优先级机制,高优先级表(比如频繁更新的核心表)优先处理。

配合 pg_stat_autovacuum_scores 视图,膨胀风险一览无余:

代码语言:javascript
复制
SELECT relname, score, would_vacuum, would_analyze
  FROM pg_stat_autovacuum_scores;

4. 在线启用/禁用数据校验和

痛点:以前开启校验和必须停机,风险高、窗口难找。

PostgreSQL 19pg_checksums 支持在线模式,running 集群上直接启用/禁用。

数据完整性保障,now or never,不用再等"完美窗口"。


二、性能监控:DBA 的"透视眼"升级

5. EXPLAIN (IO)——慢查询的 I/O 行为一览无余

痛点:只知道 query慢,不知道慢在 I/O 还是 CPU。

PostgreSQL 19:EXPLAIN 新增 IO 选项,显示预取距离、I/O 请求次数:

代码语言:javascript
复制
EXPLAIN (IO, ANALYZE) SELECT * FROM t WHERE ...;
-- 输出示例:
--  I/O: read distance=128KB, requests=4

结合 auto_explain.log_io GUC,自动记录慢查询的 I/O 行为。


6. TSC 时钟优化——监控开销降低 20%

痛点:开 EXPLAIN ANALYZE 监控时,引入的额外开销本身就能让 query 变慢两倍。

PostgreSQL 19:x86-64 平台大幅优化,移动大量行查询的开销从 2 倍降到 1.2 倍,TPCH 复杂查询监控开销降低约 20%。

代码语言:javascript
复制
-- 现在可以更放心地使用 EXPLAIN ANALYZE
EXPLAIN (ANALYZE, BUFFERS) SELECT * FROM big_table;

7. 锁统计支持——锁竞争终于有据可查

PostgreSQL 19:新增 PGSTAT_KIND_LOCK 统计类型,跟踪锁等待次数和等待时间。

代码语言:javascript
复制
-- 查看锁等待情况
SELECT * FROM pg_stat_locks;  -- 新增强力视图

DBA 定位锁竞争问题,终于不用靠"玄学"了。


8. pg_plan_advice——执行计划的"强制选择器"

痛点:复杂查询的统计信息有时会误导 planner,手动调优苦不堪言。

PostgreSQL 19:提供稳定执行计划选择和强制特定计划的能力。

这是调优疑难杂症的终极武器,planner 也不一定总是对的,对吧?


9. 远程统计信息导入——分布式架构的福音

痛点postgres_fdw 跨节点查询,每次都要重新 ANALYZE,网络开销不小。

PostgreSQL 19restore_stats 选项,直接从远程服务器导入统计信息:

代码语言:javascript
复制
CREATE SERVER my_remote FOREIGN DATA WRAPPER postgres_fdw
  OPTIONS (restore_stats 'true');

DBA 可以集中管理统计信息,减少跨节点 ANALYZE 的延迟。


三、开发者神器:少写代码,多拿绩效

10. COPY JSON FORMAT——前后端联调的救星

痛点:导出数据给前端,JSON 格式要写一堆 json_agg()/json_build_object(),还容易出错。

PostgreSQL 19:一行 SQL 直接导出 NDJSON:

代码语言:javascript
复制
COPY (SELECT id, name, created_at FROM users) TO STDOUT WITH FORMAT JSON;
-- {"id":1,"name":"张三","created_at":"2025-01-01"},{"id":2,"name":"李四","created_at":"2025-01-02"}...
代码语言:javascript
复制
-- 合法 JSON 数组?
COPY (SELECT ...) TO STDOUT WITH FORMAT JSON, force_array true;
-- [{"id":1,"name":"a"},{"id":2,"name":"b"},...]

psql \copy 搞定导出,前端直呼专业。


11. SQL 属性图查询 (SQL/PGQ)——图查询写进 SQL 标准

PostgreSQL 19:实现 ISO/IEC 9075-16:2023 SQL/PGQ 标准,图查询语法进入 PostgreSQL:

代码语言:javascript
复制
-- 创建属性图
CREATE PROPERTY GRAPH my_graph;

-- 图模式匹配
SELECT * FROM GRAPH_TABLE(my_graph
  MATCH (a) -> (b) -> (c)
  WHERE a.type = 'user'
  COLUMNS (a.name AS user, b.name AS product, c.action));
代码语言:javascript
复制
# psql 查看属性图
\dG my_graph

图数据库能力,PostgreSQL 帮你省钱。


12. 时态 UPDATE/DELETE——时间维度数据的官方支持

痛点:业务数据常有"有效期"概念(如订单、合同、库存),手动写起止时间条件容易漏。

PostgreSQL 19:SQL 标准的时态更新/删除:

代码语言:javascript
复制
UPDATE t FOR PORTION OF valid_at
  FROM '2005-01-01' TO '2006-01-01'
  SET status = 'expired';

再也不用写 WHERE valid_at @> '2005-06-01'::tstzrange 了。


13. 外键检查 1.8 倍加速

痛点:批量导入数据时,外键检查是性能瓶颈。

PostgreSQL 19:批量索引探测优化,FK 检查缓冲 64 行后批量探测。

实测 int PK/FK,100万行:快 1.8 倍。数据导入脚本可以少等一杯咖啡的时间。


14. JSONpath 字符串方法全家桶

PostgreSQL 19:新增 ltrim()rtrim()btrim()lower()upper()initcap()replace()split_part() 方法:

代码语言:javascript
复制
SELECT '{"name": "JOHN DOE"}'::jsonpath.JSON -> 'name' -> '$.name.initcap()';
-- "John Doe"

SELECT '{"url": "https://example.com"}'::jsonpath.JSON -> 'url' -> '$.url.replace("https", "http")';
-- "http://example.com"

JSON 清洗不用再跑到应用层处理了。


四、DDL 工具:元数据管理的瑞士军刀

15. pg_get_*_ddl 函数家族——对象定义导出利器

痛点:导出数据库/角色的完整 DDL,要写一堆 pg_dump --schema-only,还得自己拼装。

PostgreSQL 19:三个新函数,一个 SQL 搞定:

代码语言:javascript
复制
-- 导出数据库 DDL
SELECT pg_get_database_ddl('mydb'::regdatabase, pretty => true);

-- 导出角色 DDL(含成员关系)
SELECT pg_get_role_ddl('myrole'::regrole, memberships => true);

-- 导出表空间 DDL
SELECT pg_get_tablespace_ddl('mytbs'::regtablespace);

代码审查、迁移、环境复现——DBA 提效利器。


16. 数据库级逻辑复制快照——跨库操作不再互相堵

痛点:逻辑解码快照以前是实例级别,一个数据库的长事务会阻塞同实例下其他数据库的 REPACK。

PostgreSQL 19:快照现在可以数据库级别隔离,操作更灵活。


五、企业级增强:大规模部署的底气

17. libpq SNI 支持——多域名 SSL 证书不再头疼

痛点:同一 IP 上托管多个 PostgreSQL 实例,要配置不同 SSL 证书,SNI 不支持就只能多 IP。

PostgreSQL 19:服务端 TLS 支持 Server Name Indication (SNI),一个 IP,多域名证书,妥妥的。

云厂商和 PaaS 平台管理员狂喜。


18. AIO Worker 池自动调整——I/O 配置更简单

痛点:之前 AIO worker 数量需要手动调优,配置复杂。

PostgreSQL 19:I/O worker 池大小自动调整,只需设置范围:

代码语言:javascript
复制
io_min_workers=2      -- 最小 workers
io_max_workers=8      -- 最大 workers
io_worker_idle_timeout=60s
io_worker_launch_interval=100ms

PostgreSQL 自己学会了"弹性伸缩"。


总结

PostgreSQL 19 是近几代中体感最强的版本:

  • DBA:零停机 REPACK、智能 autovacuum、完善的监控体系——熬夜次数 -1
  • 开发者:COPY JSON、属性图查询、时态数据操作——代码量 -50%
  • 架构师:分布式统计信息、SNI 支持、AIO 自动调优——方案选择 +3

如果觉得有收获,转发给你身边用 PostgreSQL 的同事和朋友。

本文基于 PostgreSQL 19 开发分支分析整理,部分特性以最终发布版本为准。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 digoal德哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PostgreSQL 19 即将冻结特性, 进入beta阶段,我分析了2700多个commit后,精选出 18 个"真香"特性。
    • 一、零停机运维:这几个特性值一套年卡
      • 1. REPACK CONCURRENTLY——终于不用半夜停机了
      • 2. Autovacuum 学会"并行干活"了
      • 3. Autovacuum 表优先级机制——谁急谁先来
      • 4. 在线启用/禁用数据校验和
    • 二、性能监控:DBA 的"透视眼"升级
      • 5. EXPLAIN (IO)——慢查询的 I/O 行为一览无余
      • 6. TSC 时钟优化——监控开销降低 20%
      • 7. 锁统计支持——锁竞争终于有据可查
      • 8. pg_plan_advice——执行计划的"强制选择器"
      • 9. 远程统计信息导入——分布式架构的福音
    • 三、开发者神器:少写代码,多拿绩效
      • 10. COPY JSON FORMAT——前后端联调的救星
      • 11. SQL 属性图查询 (SQL/PGQ)——图查询写进 SQL 标准
      • 12. 时态 UPDATE/DELETE——时间维度数据的官方支持
      • 13. 外键检查 1.8 倍加速
      • 14. JSONpath 字符串方法全家桶
    • 四、DDL 工具:元数据管理的瑞士军刀
      • 15. pg_get_*_ddl 函数家族——对象定义导出利器
      • 16. 数据库级逻辑复制快照——跨库操作不再互相堵
    • 五、企业级增强:大规模部署的底气
      • 17. libpq SNI 支持——多域名 SSL 证书不再头疼
      • 18. AIO Worker 池自动调整——I/O 配置更简单
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档