首页
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品 APCC: Greenplum管理平台
文档
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源
登录
×
修改密码

PostgreSQL 19作为当前开发中的版本(预计2026年底发布),整合了社区近期的多项关键改进,覆盖查询性能、数据类型支持、复制与维护效率、编程扩展性等多个领域。以下是即将添加的核心功能及详细说明:

1. 查询性能优化:分析与维护场景的突破性提升

PostgreSQL 19针对分析型查询(如多表关联+聚合)和大表维护(如批量更新/删除)的性能瓶颈,引入了两项重要优化:

1.1 聚合下推(Aggregate Pushdown):先聚合再关联的执行计划优化

传统PostgreSQL执行“关联后聚合”(Join-then-Aggregate)的逻辑,即当查询包含多表关联与聚合时,先将所有表关联成一张大表,再对结果进行聚合。这种方式在处理“大事实表+小维度表”的场景(如电商订单表关联商品分类表)时,会因关联后的大表数据量过大导致聚合效率低下。
PostgreSQL 19的聚合下推优化允许执行计划将聚合操作提前至关联之前(“聚合后关联”,Aggregate-then-Join),即先对每个表进行局部聚合,再将聚合结果关联,大幅减少关联的数据量。例如,对于“按商品分类统计订单数量”的查询,传统方式需要先关联订单表与分类表(假设订单表有100万行),再聚合;而聚合下推会先对订单表按分类聚合(得到1000行分类汇总),再与分类表关联,聚合效率提升显著。

1.2 并行TID范围扫描(Parallel TID Range Scan):加速大表批量操作

TID(Tuple ID)是PostgreSQL中标识行的物理位置(格式为(block_number, offset)),常用于批量操作(如DELETE FROM table WHERE ctid >= '(0,0)' AND ctid < '(1000,0)')。传统TID范围扫描是单线程的,即使有大表和多核CPU,也无法利用并行性,导致批量操作耗时过长(如1TB表的批量更新可能需要数小时)。
PostgreSQL 19引入并行TID范围扫描,将TID范围拆分为多个子范围,分配给多个worker进程并行处理。例如,对于1000万行的表,并行度为3时,执行时间从单线程的448ms缩短至147ms(加速比约3倍)。这种优化尤其适合无索引的批量操作(如全表扫描或物理分块处理),减少了I/O开销和CPU等待时间。

2. 数据类型与查询功能增强:更符合SQL标准与易用性

PostgreSQL 19扩展了数据类型支持和查询语法,提升了与SQL标准的兼容性及用户体验:

2.1 GROUP BY ALL语法:简化分组查询

传统SQL中,GROUP BY子句需要显式列出所有非聚合的选择列(如SELECT a, b, COUNT(*) FROM t GROUP BY a, b),当选择列较多时,容易遗漏或出错。PostgreSQL 19新增GROUP BY ALL语法,自动将所有非聚合的选择列纳入分组条件,减少手动维护的成本。例如:

  1. SELECT to_char(actual_departure, 'YYYY'), status, COUNT(*)
  2. FROM flights
  3. GROUP BY ALL -- 自动包含to_char(actual_departure, 'YYYY')和status
  4. ORDER BY 1;

该语法符合SQL:202y标准,已被社区批准纳入PostgreSQL 19。

2.2 窗口函数:支持IGNORE NULLS选项

窗口函数(如lagleadfirst_value)是分析查询的重要工具,但传统实现对NULL值的处理不够灵活(默认保留NULL)。PostgreSQL 19遵循SQL标准,为窗口函数新增IGNORE NULLS选项,允许跳过NULL值进行计算。例如,对于first_value(b) IGNORE NULLS OVER (ORDER BY a),函数会忽略NULL值,返回第一个非NULL的b值:

  1. SELECT a, b,
  2. first_value(b) RESPECT NULLS OVER w AS respect_nulls, -- 保留NULL,结果为NULL
  3. first_value(b) IGNORE NULLS OVER w AS ignore_nulls -- 跳过NULL,结果为1
  4. FROM (VALUES ('a',NULL),('b',1),('c',2)) AS t(a,b)
  5. WINDOW w AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);

该选项提升了窗口函数在处理稀疏数据时的准确性。

2.3 PL/Python支持事件触发器:扩展编程接口

事件触发器(Event Trigger)是PostgreSQL中用于捕获DDL事件的机制(如CREATE TABLEALTER TABLE),传统上仅支持PL/pgSQL语言。PostgreSQL 19新增PL/Python支持,允许用Python编写事件触发器函数,提升了编程灵活性。例如,以下Python函数会在DDL操作结束时打印命令标签和对象身份:

  1. CREATE EXTENSION IF NOT EXISTS plpython3u;
  2. CREATE OR REPLACE FUNCTION describe_ddl()
  3. RETURNS event_trigger AS $$
  4. for row in plpy.cursor("SELECT command_tag, object_identity FROM pg_event_trigger_ddl_commands()"):
  5. plpy.notice("Command: {}, Object: {}".format(row['command_tag'], row['object_identity']))
  6. $$ LANGUAGE plpython3u;
  7. CREATE EVENT TRIGGER after_ddl ON ddl_command_end EXECUTE FUNCTION describe_ddl();

该功能的扩展使得Python开发者可以更便捷地集成PostgreSQL的事件处理逻辑。

3. 复制与维护增强:提升高可用与运维效率

PostgreSQL 19针对逻辑复制(Logical Replication)和备份恢复场景,增强了序列同步与状态管理功能:

3.1 序列同步(Sequence Synchronization):支持逻辑复制中的序列一致性

序列(Sequence)是PostgreSQL中用于生成唯一标识符的对象(如SERIAL类型),传统逻辑复制中,序列的同步需要手动干预(如pg_dump导出序列值并在备库导入),容易导致主备不一致。PostgreSQL 19新增序列同步功能,允许逻辑复制自动同步序列的当前值:

3.2 增量备份与恢复:提升备份效率

虽然PostgreSQL 18已引入增量备份,但PostgreSQL 19进一步完善了增量备份的功能,允许增量备份的组合(即无需每次都创建全量备份),减少了备份存储空间的占用。例如,可以先创建一个全量备份,然后每天创建增量备份,恢复时只需全量备份加上最近的增量备份,无需多次全量备份。

4. 其他值得关注的功能

除上述核心功能外,PostgreSQL 19还包含以下改进:

5. 总结

PostgreSQL 19的功能改进主要围绕性能提升(聚合下推、并行TID扫描)、易用性增强(GROUP BY ALL、窗口函数IGNORE NULLS)、复制与维护可靠性(序列同步、增量备份)三个核心方向,旨在满足现代应用对数据库的高并发、低延迟、高可用需求。这些功能均来自社区的持续贡献(如EnterpriseDB、PostgresPro等厂商的工程师参与),体现了PostgreSQL生态的活力与开放性。

需要注意的是,PostgreSQL 19仍处于开发阶段(截至2026年2月),部分功能可能会有调整或回滚,最终功能以官方发布的19.0版本为准。