PostgreSQL 19作为当前开发中的版本(预计2026年底发布),整合了社区近期的多项关键改进,覆盖查询性能、数据类型支持、复制与维护效率、编程扩展性等多个领域。以下是即将添加的核心功能及详细说明:
PostgreSQL 19针对分析型查询(如多表关联+聚合)和大表维护(如批量更新/删除)的性能瓶颈,引入了两项重要优化:
传统PostgreSQL执行“关联后聚合”(Join-then-Aggregate)的逻辑,即当查询包含多表关联与聚合时,先将所有表关联成一张大表,再对结果进行聚合。这种方式在处理“大事实表+小维度表”的场景(如电商订单表关联商品分类表)时,会因关联后的大表数据量过大导致聚合效率低下。
PostgreSQL 19的聚合下推优化允许执行计划将聚合操作提前至关联之前(“聚合后关联”,Aggregate-then-Join),即先对每个表进行局部聚合,再将聚合结果关联,大幅减少关联的数据量。例如,对于“按商品分类统计订单数量”的查询,传统方式需要先关联订单表与分类表(假设订单表有100万行),再聚合;而聚合下推会先对订单表按分类聚合(得到1000行分类汇总),再与分类表关联,聚合效率提升显著。
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等待时间。
PostgreSQL 19扩展了数据类型支持和查询语法,提升了与SQL标准的兼容性及用户体验:
传统SQL中,GROUP BY子句需要显式列出所有非聚合的选择列(如SELECT a, b, COUNT(*) FROM t GROUP BY a, b),当选择列较多时,容易遗漏或出错。PostgreSQL 19新增GROUP BY ALL语法,自动将所有非聚合的选择列纳入分组条件,减少手动维护的成本。例如:
SELECT to_char(actual_departure, 'YYYY'), status, COUNT(*)FROM flightsGROUP BY ALL -- 自动包含to_char(actual_departure, 'YYYY')和statusORDER BY 1;
该语法符合SQL:202y标准,已被社区批准纳入PostgreSQL 19。
窗口函数(如lag、lead、first_value)是分析查询的重要工具,但传统实现对NULL值的处理不够灵活(默认保留NULL)。PostgreSQL 19遵循SQL标准,为窗口函数新增IGNORE NULLS选项,允许跳过NULL值进行计算。例如,对于first_value(b) IGNORE NULLS OVER (ORDER BY a),函数会忽略NULL值,返回第一个非NULL的b值:
SELECT a, b,first_value(b) RESPECT NULLS OVER w AS respect_nulls, -- 保留NULL,结果为NULLfirst_value(b) IGNORE NULLS OVER w AS ignore_nulls -- 跳过NULL,结果为1FROM (VALUES ('a',NULL),('b',1),('c',2)) AS t(a,b)WINDOW w AS (ORDER BY a ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING);
该选项提升了窗口函数在处理稀疏数据时的准确性。
事件触发器(Event Trigger)是PostgreSQL中用于捕获DDL事件的机制(如CREATE TABLE、ALTER TABLE),传统上仅支持PL/pgSQL语言。PostgreSQL 19新增PL/Python支持,允许用Python编写事件触发器函数,提升了编程灵活性。例如,以下Python函数会在DDL操作结束时打印命令标签和对象身份:
CREATE EXTENSION IF NOT EXISTS plpython3u;CREATE OR REPLACE FUNCTION describe_ddl()RETURNS event_trigger AS $$for row in plpy.cursor("SELECT command_tag, object_identity FROM pg_event_trigger_ddl_commands()"):plpy.notice("Command: {}, Object: {}".format(row['command_tag'], row['object_identity']))$$ LANGUAGE plpython3u;CREATE EVENT TRIGGER after_ddl ON ddl_command_end EXECUTE FUNCTION describe_ddl();
该功能的扩展使得Python开发者可以更便捷地集成PostgreSQL的事件处理逻辑。
PostgreSQL 19针对逻辑复制(Logical Replication)和备份恢复场景,增强了序列同步与状态管理功能:
序列(Sequence)是PostgreSQL中用于生成唯一标识符的对象(如SERIAL类型),传统逻辑复制中,序列的同步需要手动干预(如pg_dump导出序列值并在备库导入),容易导致主备不一致。PostgreSQL 19新增序列同步功能,允许逻辑复制自动同步序列的当前值:
INIT(需要同步)和READY(已同步); sequencesync worker进程,负责将INIT状态的序列批量同步至备库; FOR ALL SEQUENCES子句,允许在发布中包含所有序列(如CREATE PUBLICATION pub FOR ALL SEQUENCES;)。虽然PostgreSQL 18已引入增量备份,但PostgreSQL 19进一步完善了增量备份的功能,允许增量备份的组合(即无需每次都创建全量备份),减少了备份存储空间的占用。例如,可以先创建一个全量备份,然后每天创建增量备份,恢复时只需全量备份加上最近的增量备份,无需多次全量备份。
除上述核心功能外,PostgreSQL 19还包含以下改进:
COPY TO ... FORMAT JSON(将查询结果导出为JSON格式)和JSON_TABLE的PLAN子句(优化JSON路径查询的执行计划);pg_dumpall新增非文本模式(如--format=custom),允许将所有数据库导出为自定义格式(而非纯文本),提升了备份的安全性;MAINTAIN权限,允许非超级用户执行VACUUM、ANALYZE、REINDEX等维护操作,减少了超级用户的负担。PostgreSQL 19的功能改进主要围绕性能提升(聚合下推、并行TID扫描)、易用性增强(GROUP BY ALL、窗口函数IGNORE NULLS)、复制与维护可靠性(序列同步、增量备份)三个核心方向,旨在满足现代应用对数据库的高并发、低延迟、高可用需求。这些功能均来自社区的持续贡献(如EnterpriseDB、PostgresPro等厂商的工程师参与),体现了PostgreSQL生态的活力与开放性。
需要注意的是,PostgreSQL 19仍处于开发阶段(截至2026年2月),部分功能可能会有调整或回滚,最终功能以官方发布的19.0版本为准。