开发版本: 19 / devel
此文档适用于不受支持的 PostgreSQL 版本。
您可能需要查看当前版本的相同页面,或上面列出的其他受支持版本。

E.1. 发布版本 19 #

发布日期:. 2026-??-??,截至 2026-04-13

E.1.1. 概览 #

PostgreSQL 19 包含许多新特性和增强,包括:

  • 稍后补充

上述条目以及 PostgreSQL 19 的其他新特性,在下面各节中会作更详细的说明。

E.1.2. 迁移到版本 19 #

对于想从任何先前版本迁移数据的用户,需要使用 pg_dumpall 执行导出/恢复,或者使用 pg_upgrade,或者使用逻辑复制。有关迁移到新主版本的一般信息,请参见 Section 18.6

19 版本包含若干可能影响与先前版本兼容性的更改。请注意以下不兼容项:

  • 新增服务器变量 password_expiration_warning_threshold,用于提示密码即将过期(Gilles Darold,Nathan Bossart) §

    默认警告期为七天。

  • 在成功完成 MD5 密码认证后发出警告(Nathan Bossart) §

    可以通过服务器变量 md5_password_warnings 禁用该警告。MD5 密码已在 Postgres 18 中被标记为弃用。

  • 移除 RADIUS 支持(Thomas Munro) §

    Postgres 只支持通过 UDP 的 RADIUS,而这存在无法修复的安全问题。

  • 强制数据库服务器中的 standard_conforming_strings 始终为 "on"(Tom Lane) §

    服务器变量 escape_string_warning 已被移除,因为已无必要。客户端应用程序仍然支持 "standard_conforming_strings = off",以兼容旧服务器。

  • 禁止数据库名、角色名和表空间名中出现回车和换行(Mahendra Singh Thalor) §

    这样做是为了避免安全问题。pg_upgrade 也会拒绝升级那些使用此类名称的数据库集簇。

  • 将 inet 和 cidr 数据类型的默认索引操作符类从 btree_gist 改为 GiST(Tom Lane) § §

    btree_gist 的 inet/cidr 操作符类存在缺陷,因为它们可能排除本应返回的行。如果旧服务器中存在 btree_gist inet/cidr 索引,Pg_upgrade 将会失败。

  • 停止重排由 CREATE SCHEMA 创建的非模式对象(Tom Lane,Jian He) § §

    重排的目的是避免依赖关系,但它并不完善。Postgres 现在使用显式指定的对象顺序,外键除外,外键会最后创建。

  • 禁止在 COPY FROM ... WHERE 中使用系统列(Tom Lane) §

    这些列的值并未明确定义。

  • 让事务把其 READ ONLY 和 DEFERRABLE 状态传递给 postgres_fdw 会话(Etsuro Fujita) §

    这意味着 READ ONLY 事务将不能再修改由 postgres_fdw 会话处理的行。

  • 将 max_locks_per_transactions 的默认值从 64 改为 128(Heikki Linnakangas) §

    锁大小分配方式已经改变,因此要达到与先前版本相同的容量,实际上现在必须将设置值翻倍。

  • 默认禁用 JIT(Jelte Fennema-Nio) §

    之前 JIT 默认启用,并根据优化器代价决定是否激活。不幸的是,这种代价估算被认为并不可靠,因此需要大量运行大型分析查询的站点手工启用 JIT。

  • 将等待事件类型 BUFFERPIN 重命名为 BUFFER(Andres Freund) §

  • 将索引访问方法处理器改为使用静态分配的 IndexAmRoutines 结构,而不是动态分配的结构(Matthias van de Meent) §

    这是一项向后不兼容的更改。

  • 移除优化器钩子 get_relation_info_hook,并新增位置更合适的钩子 build_simple_rel_hook(Robert Haas) §

  • 移除 MULE_INTERNAL 编码(Thomas Munro) §

    这种编码很复杂,而且很少使用。使用它的数据库将需要使用不同的编码进行导出和恢复。

E.1.3. 变更 #

下文将详细介绍 PostgreSQL 19 与上一个主版本之间的变更。

E.1.3.1. 服务器 #

E.1.3.1.1. 优化器 #
  • 在不存在 NULL 时,允许将 NOT IN 转换为更高效的 ANTI JOIN(Richard Guo)§

  • 允许更多 LEFT JOIN 转换为 ANTI JOIN(Tender Wang)§

  • 允许在唯一内侧的 ANTI JOIN 中使用 Memoize(Richard Guo)§

  • 改进半连接规划(Richard Guo)§

  • 改进哈希连接对带 NULL 连接键元组的处理(Tom Lane)§

  • 在参数可证明为 NULL 时,允许把 IS [NOT] DISTINCT FROM NULL 转换为 IS [NOT] NULL(Richard Guo)§

    后一种形式更易优化。

  • 在优化器中更早地对 "Var IS [NOT] NULL" 做常量折叠(Richard Guo)§

    这为后续优化创造了条件。

  • 允许 Append 和 MergeAppend 考虑显式增量排序(Richard Guo)§

  • 允许在连接之前先执行某些聚合处理(Richard Guo,Antonin Houska)§§§

    这可以减少需要处理的行数。

  • 允许 pg_aggregate.aggtransspace 为负值,以表示内存使用没有上限(Richard Guo)§

    该信息会被优化器用于规划内存使用。

  • 加快大统计目标下的连接选择度计算(Ilia Evdokimov,David Geier)§

  • 为返回 boolean 值的函数启用正确的优化器统计信息(Tom Lane)§

  • 允许在虚拟生成列上使用扩展统计信息(Yugo Nagata)§

  • 允许 pg_restore_extended_stats() 恢复优化器扩展统计信息(Corey Huinker,Michael Paquier,Chao Li)§§§§

  • 新增函数 pg_clear_extended_stats() 用于删除扩展统计信息(Corey Huinker,Michael Paquier)§

  • 调整优化器,使其在部分路径决策时考虑启动代价(Robert Haas,Tomas Vondra)§

E.1.3.1.2. 常规性能 #
  • 改进外键约束检查性能(Junwang Zhao,Amit Langote,Chao Li)§§§§

  • 改进大请求下异步 I/O 读预取调度(Andres Freund)§§§

  • 允许 io_method = "worker" 自动控制所需后台工作进程(Thomas Munro)§

    新增服务器变量 io_min_workers、io_max_workers、io_worker_idle_timeout 和 io_worker_launch_interval。

  • 允许查询表扫描把页面标记为空闲空间映射中的 all-visible(Melanie Plageman)§

    此前只有 VACUUM 和 COPY FREEZE 可以做到这一点。

  • 允许 autovacuum 使用并行 vacuum 工作进程(Daniil Davydov)§§

    通过服务器变量 autovacuum_max_parallel_workers 和每表存储参数 autovacuum_parallel_workers 启用。

  • 允许 TID Range Scan 并行化(Cary Huang,David Rowley)§

  • 使用 SIMD CPU 指令改进 COPY FROM 的 text 和 CSV 输出性能(Nazir Bilal Yavuz,Shinya Kato)§

  • 改进 NOTIFY,使其只唤醒正在监听指定通知的后端(Joel Jacobson)§

    此前大多数后端都会被 NOTIFY 唤醒。

  • 允许对基于带约束域的列的添加通常避免表重写(Jian He)§

    此前总是需要表重写。

  • 允许在可证明非空参数上更早地计算 IS [NOT] TRUE/FALSE/UNKNOWN(Richard Guo)§

  • 简化 COALESCE 和 ROW(...) IS [NOT] NULL,以避免求值不必要的参数(Richard Guo)§§

  • 允许对非恒定参数更早地计算 IS DISTINCT FROM(Richard Guo)§

  • 将 TOAST 压缩默认方法从 pglz 改为更高效的 lz4(Euler Taveira)§

    通过修改服务器变量 default_toast_compression 的默认值实现。

  • 改进内部行展开性能(David Rowley)§

  • 通过流式读取改进 hash 索引批量删除性能(Xuneng Zhou)§

  • 使用基数排序改进排序性能(John Naylor)§

  • 改进计时性能测量(Lukas Fittl、Andres Freund、David Geier、Lukas Fittl)§§

    这有利于 EXPLAIN (ANALYZE, TIMING) 和 pg_test_timing,并由服务器变量 timing_clock_source 控制。

  • 优化 plpgsql 语法 SELECT simple-expression INTO var(Tom Lane)§

  • 改进无 128 位整数支持平台上的数值运算性能(Dean Rasheed)§

E.1.3.1.3. 系统视图 #
  • 新增系统视图 pg_stat_lock 和函数 pg_stat_get_lock(),用于报告每种锁类型的统计信息(Bertrand Drouvot)§

  • 新增系统视图 pg_stat_recovery,用于报告恢复状态(Xuneng Zhou,Shinya Kato)§§

  • 在系统视图 pg_stat_replication_slots 中新增 mem_exceeded_count 列(Bertrand Drouvot)§

    它用于报告 logical_decoding_work_mem 被超过的次数。

  • 在系统视图 pg_stat_all_tables、pg_stat_all_indexes 和 pg_statio_all_sequences 中新增 stats_reset 列(Bertrand Drouvot,Sami Imseih,Shihao Zhong)§

    它也出现在 "sys" 和 "user" 变体视图中。

  • 在系统视图 pg_stat_user_functions 和 pg_stat_database_conflicts 中新增 stats_reset 列(Bertrand Drouvot,Shihao Zhong)§§

  • 新增系统视图 pg_stat_autovacuum_scores,用于报告每表 autovacuum 细节(Sami Imseih)§

  • 在系统视图 pg_stat_progress_vacuum 中新增 vacuum 启动细节(Shinya Kato)§

    新的 started_by 列报告 vacuum 的发起者,mode 则表示其激进程度。

  • 在系统视图 pg_stat_progress_analyze 中新增 analyze 启动细节(Shinya Kato)§

    新的 started_by 列报告 analyze 的发起者。

  • 在系统视图 pg_stat_progress_basebackup 中新增一列,用于报告备份类型(Shinya Kato)§

    可能的值为 "full" 或 "incremental"。

  • 新增对写入 WAL 的 full page image 字节数的报告(Shinya Kato)§

    可通过系统视图 pg_stat_wal 和函数 pg_stat_get_backend_wal() 访问。

  • 在系统视图列 pg_stat_wal_receiver.status 中新增 "connecting" 状态(Xuneng Zhou)§

  • 在系统视图 pg_stats、pg_stats_ext 和 pg_stats_ext_exprs 中新增列(Corey Huinker)§

    为 pg_stats 新增表 OID 和属性号列,并为另外两个视图新增表 OID 和统计对象 OID 列。

  • 在系统视图 pg_stats_ext_exprs 中新增范围类型扩展统计信息(Corey Huinker,Michael Paquier)§

  • 新增系统视图 pg_dsm_registry_allocations,用于报告动态共享内存细节(Florents Tselai,Nathan Bossart)§§

  • 在系统视图 pg_available_extensions 和 pg_available_extension_versions 中新增 "location" 列,用于报告扩展所在的文件系统目录(Matheus Alcantara)§

E.1.3.1.4. 监控 #
  • 允许按进程类型指定 log_min_messages 日志级别(Euler Taveira)§

    新格式为 "type:level"。不带冒号的值控制未指定的进程类型,以保持向后兼容。

  • 新增服务器变量 log_autoanalyze_min_duration,用于记录耗时较长的 autoanalyze 操作(Shinya Kato)§

    服务器变量 log_autovacuum_min_duration 现在只控制自动 vacuum 操作的日志记录。

  • 默认启用服务器变量 log_lock_waits(Laurenz Albe)§

  • 新增服务器变量 debug_print_raw_parse,用于记录原始解析树(Chao Li)§

    当服务器以 debug 级别 3 及以上启动时,也会启用该输出。

  • 让来自远端服务器的消息以与本地服务器消息相同的格式出现在服务器日志中(Vignesh C)§

    这包括 replication、postgres_fdw 和 dblink 服务器。

  • 为 VACUUM 和 ANALYZE 日志新增 WAL full page write 字节报告(Shinya Kato)§

  • 为 COPY FROM/TO 在 pipe/file/program 上新增 I/O 等待事件(Nikolay Samokhvalov)§

  • 新增 WAL 写入和刷盘 LSN 的等待事件(Xuneng Zhou)§

  • 让 pg_get_sequence_data 函数返回序列页 LSN(Vignesh C)§

  • 新增函数 pg_get_multixact_stats(),用于报告 multixact 活动(Naga Appani)§

  • 当 xid 和 multi-xids 的回卷距离小于 1 亿时发出警告(Nathan Bossart)§

    此前的警告阈值为 4000 万。警告会发送给客户端并写入服务器日志。

E.1.3.1.5. 服务器配置 #
  • 允许在线启用和禁用数据校验和(Daniel Gustafsson,Magnus Hagander,Tomas Vondra)§§

    此前校验和状态只能在初始化时设置,或者在集簇离线时通过 pg_checksums 更改。

  • 新增评分系统,用于控制 autovacuum 处理表的顺序(Nathan Bossart)§

    新增的服务器变量有 autovacuum_freeze_score_weight、autovacuum_multixact_freeze_score_weight、autovacuum_vacuum_score_weight、autovacuum_vacuum_insert_score_weight 和 autovacuum_analyze_score_weight。

  • 新增 SNI(Server Name Indication)服务端报告(Daniel Gustafsson,Jacob Champion)§

    新的配置文件 PGDATA/pg_hosts.conf 指定主机名/密钥对。

  • 新增 OAUTH 流程钩子 PQAUTHDATA_OAUTH_BEARER_TOKEN_V2(Jacob Champion)§§

    它是在 PQAUTHDATA_OAUTH_BEARER_TOKEN 的基础上增加了 issuer 标识符和错误消息规范的改进版本。

  • 允许在数据库级操作之前配置后台工作进程终止(Aya Iwata)§

  • 允许通过将值设为 NULL 来清空表示列表的服务器变量(Tom Lane)§

  • 将 GB18030 编码从 2000 版更新到 2022 版(Chao Li,Zheng Tao)§

    兼容性细节请参见提交说明。

E.1.3.1.6. 流复制与恢复 #
  • 允许备库通过 WAIT FOR 等待 LSN 被回放(Kartyshov Ivan,Alexander Korotkov,Xuneng Zhou)§§

  • 改进 pg_sync_replication_slots(),使其等待同步完成(Ajin Cherian,Zhijie Hou)§

    此前某些同步失败不会被报告。

  • 新增服务器变量 wal_sender_shutdown_timeout,用于限制关闭期间的副本同步等待(Andrey Silitskiy,Hayato Kuroda)§

    默认情况下,sender 仍会一直等待同步。

  • 允许按订阅和用户设置 wal_receiver_timeout(Fujii Masao)§§

    这允许不同订阅使用不同的 wal_receiver_timeout 值。

  • 新增可选 pid 参数到 pg_replication_origin_session_setup(),以允许 SQL 级复制方案并行化(Doruk Yilmaz,Hayato Kuroda)§

E.1.3.1.7. 逻辑复制 #
  • 允许订阅者中存储的序列值与发布者一致(Vignesh C)§§§

    可在 CREATE SUBSCRIPTION、ALTER SUBSCRIPTION ... REFRESH PUBLICATION 和 ALTER SUBSCRIPTION ... REFRESH SEQUENCES 中启用。后者只更新值,不更新序列存在性。函数 pg_get_sequence_data() 可用于检查序列同步。

  • 允许发布通过 ALL SEQUENCES 子句发布全部序列(Vignesh C,Tomas Vondra)§

  • 增强 ALTER SUBSCRIPTION 对发布的支持,以同步订阅者上的序列存在性,使其与发布者一致(Vignesh C)§

  • 允许 CREATE/ALTER PUBLICATION 使用 EXCEPT 子句排除某些表(Vignesh C,Shlok Kyal)§§§§

    在指定 ALL TABLES 时尤其有用。

  • 允许 CREATE SUBSCRIPTION 使用 postgres_fdw 外部数据包装器连接参数(Jeff Davis)§

    连接参数通过 CREATE SUBSCRIPTION ... SERVER 引用。

  • 当 wal_level 为 "replica" 时,允许在需要时自动启用逻辑复制(Masahiko Sawada)§

    新增服务器变量 effective_wal_level 报告有效 WAL 级别。

  • 新增逻辑订阅者设置 retain_conflict_info,以保留冲突解决所需信息(Zhijie Hou)§

  • 报告更新应用到订阅者上已被删除行的情况(Zhijie Hou)§

    这要求订阅者启用 retain_dead_tuples。

  • 当所需事务保留低于 max_retention_duration 时重新启用 retain_dead_tuples(Zhijie Hou)§

  • 新增订阅选项 max_retention_duration,用于限制 retain_dead_tuples 的保留(Zhijie Hou)§

    达到上限后,必须手工重新启用或创建新订阅后才能继续保留死元组。

  • 在 pg_stat_subscription_stats 中新增列 sync_seq_error_count,用于报告序列同步错误(Vignesh C)§§

  • 在系统视图 pg_stat_subscription_stats 中将 sync_error_count 重命名为 sync_table_error_count(Vignesh C)§

    这是因为现在也跟踪序列错误。

  • 在 pg_stat_replication_slots 中新增 slot 同步跳过信息(Shlok Kyal)§§§

    新增列为 slotsync_skip_count、slotsync_last_skip 和 slotsync_skip_reason。

E.1.3.2. 查询命令 #

  • 新增 SQL Property Graph Queries(SQL/PGQ)支持(Peter Eisentraut,Ashutosh Bapat)§§§

    内部按视图方式处理,因此写作标准关系查询。

  • 新增 UPDATE/DELETE FOR PORTION OF(Paul A. Jungwirth)§§

    这允许对时间范围内的数据进行操作。

  • 新增 GROUP BY ALL 语法,以自动对所有非聚合、非窗口函数的 target list 参数分组(David Christensen)§

  • 允许 GROUP BY 处理引用非子查询列表达式的 target list 子查询(Tom Lane)§

    同时修复了 GROUPING() 处理 target list 子查询别名时的一个 bug。

  • 允许窗口函数使用 IGNORE NULLS/RESPECT NULLS 选项忽略 NULL(Oliver Ford,Tatsuo Ishii)§

    支持的窗口函数有 lead、lag、first_value、last_value 和 nth_value。

  • 新增 INSERT ... ON CONFLICT DO SELECT ... RETURNING 支持(Andreas Karlsson,Marko Tiikkaja,Viktor Holmberg)§

    这允许返回冲突行,并可选用 FOR UPDATE/SHARE 加锁。

E.1.3.3. 实用命令 #

  • 创建 REPACK 命令,用于替代 VACUUM FULL 和 CLUSTER(Antonin Houska)§

    这两个旧命令做的是类似的事情,但名字令人困惑,因此统一为 REPACK。

  • 允许 REPACK 在不获取 ACCESS EXCLUSIVE 锁的情况下重建表(Antonin Houska,Mihail Nikalayeu,Álvaro Herrera)§§§

    通过 CONCURRENTLY 选项启用。还新增了服务器变量 max_repack_replication_slots。

  • 允许使用 ALTER TABLE ... MERGE/SPLIT PARTITIONS 合并和拆分分区(Dmitry Koval,Alexander Korotkov,Tender Wang,Richard Guo,Dagfinn Ilmari Mannsåker,Fujii Masao,Jian He)§§

  • 允许 GRANT/REVOKE 指定执行权限调整的有效角色(Nathan Bossart,Tom Lane)§

    通过 GRANTED BY 子句控制。

  • 允许 CREATE SCHEMA 创建更多类型的非模式对象(Kirill Reshke,Jian He,Tom Lane)§

  • 允许 CHECKPOINT 接受选项列表(Christoph Berg)§§§

    支持的选项为 MODE 和 FLUSH_UNLOGGED。

  • 为 CREATE FOREIGN DATA WRAPPER 新增 CONNECTION 子句,用于指定将为订阅连接参数调用的函数(Jeff Davis,Noriyoshi Shinoda)§§

  • 在 VACUUM (VERBOSE) 和 autovacuum 日志中新增内存使用和并行度报告(Masahiko Sawada,Daniil Davydov)§§

E.1.3.3.1. 约束 #
  • 允许对 CHECK 约束使用 ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED(Jian He)§

    此前只有外键约束支持更改 enforceability。

  • 允许虚拟列在带 CHECK 约束时成功执行 ALTER COLUMN SET EXPRESSION(Jian He)§

    此前这是被禁止的。

  • 降低 ALTER DOMAIN ... VALIDATE CONSTRAINT 的锁级别,使其与 ALTER TABLE ... VALIDATE CONSTRAINT 一致(Jian He)§

E.1.3.3.2. COPY #
  • 允许 COPY FROM 跳过多行表头(Shinya Kato,Fujii Masao)§

    此前只能跳过一行表头。

  • 允许 COPY FROM 把无效输入值设置为 NULL(Jian He,Kirill Reshke)§

    通过 COPY 选项 ON_ERROR SET_NULL 实现。

  • 允许 COPY TO 输出 JSON 格式(Joe Conway,Jian He,Andrew Dunstan)§

  • 允许 JSON 格式的 COPY TO 以单个 JSON 数组输出结果(Joe Conway,Jian He)§

    COPY 选项为 FORCE_ARRAY。

  • 允许 COPY TO 输出分区表(Jian He,Ajin Cherian)§§

    此前必须使用 COPY (SELECT ...) 才能输出分区表。这也改进了逻辑复制中的表同步。

E.1.3.3.3. EXPLAIN #
  • 新增 EXPLAIN ANALYZE 选项 IO,用于报告异步 I/O 活动(Tomas Vondra)§§§

  • 在 EXPLAIN (ANALYZE, WAL) 中新增 WAL full page write 字节报告(Shinya Kato)§

  • 在 EXPLAIN 输出中新增 Memoize 缓存和查找估计值(Ilia Evdokimov,Lukas Fittl)§

    这有助于说明为什么选择了 Memoize。

E.1.3.4. 数据类型 #

  • 新增 64 位无符号数据类型 oid8(Michael Paquier)§

  • 新增更多 jsonpath 字符串方法(Florents Tselai,David E. Wheeler)§

    包括 l/r/btrim()、lower()、upper()、initcap()、replace() 和 split_part()。它们与非 JSON 字符串变体一样是不可变的。

  • 允许在 bytea 和 uuid 之间进行类型转换(Dagfinn Ilmari Mannsåker,Aleksander Alekseev)§

  • 允许使用 regdatabase 在数据库名和 oid 之间转换(Ian Lawrence Barwick)§

  • 新增 tid_block() 和 tid_offset() 函数,用于从 tid 值中提取块号和偏移量(Ayush Tiwari)§

E.1.3.5. 函数 #

  • 新增 random(min, max) 的 date、timestamp 和 timestamptz 版本(Damien Clochard,Dean Rasheed)§§

  • 允许 encode() 和 decode() 处理 base64url 和 base32hex 格式的数据(Andrey Borodin,Aleksander Alekseev,Florents Tselai)§§§

    这种格式保留顺序,不像 base32。

  • 新增用于返回范围减法结果范围集的函数(Paul A. Jungwirth)§

    函数为 range_minus_multi() 和 multirange_minus_multi()。这对表示带间隙的范围减法结果很有用。

  • 新增函数 error_on_null(),用于返回提供的参数,或在 NULL 输入时报告错误(Joel Jacobson)§

  • 允许 IS JSON 在定义于受支持基础类型之上的域上工作(Jian He)§

    受支持的基础域类型为 TEXT、JSON、JSONB 和 BYTEA。

  • 新增波兰语和世界语的全文词干分析器(Tom Lane)§

    荷兰语词干分析器也已更新。旧版荷兰语词干分析器可通过 "dutch_porter" 使用。

  • 修改 pg_read_all_data() 和 pg_write_all_data() 以读写大对象(Nitin Motiani,Nathan Bossart)§

    这些函数用于允许非超级用户运行 pg_dump。

  • 新增函数 pg_get_role_ddl(),用于输出角色创建命令(Mario Gonzalez,Bryan Green,Andrew Dunstan,Euler Taveira)§

  • 新增函数 pg_get_tablespace_ddl(),用于输出表空间创建命令(Nishant Sharma,Manni Wood,Andrew Dunstan,Euler Taveira)§

  • 新增函数 pg_get_database_ddl(),用于输出数据库创建命令(Akshay Joshi,Andrew Dunstan,Euler Taveira)§

  • 允许使用 PL/Python 编写事件触发器(Euler Taveira,Dimitri Fontaine)§

E.1.3.6. Libpq #

  • 允许 libpq 连接通过 "servicefile" 指定 service file(Torsten Förtsch,Ryo Kanbayashi)§

  • 新增特殊的 libpq 协议版本 3.9999,用于版本测试(Jelte Fennema-Nio)§

  • 新增 libpq 函数 PQgetThreadLock(),用于获取当前锁回调(Jacob Champion)§

  • 新增 libpq 连接设置 oauth_ca_file,用于指定 OAUTH 证书颁发机构文件(Jonathan Gonzalez V.,Jacob Champion)§

    也可以通过环境变量 PGOAUTHCAFILE 设置。默认使用 curl 内置证书。

  • 允许自定义 OAUTH 验证器注册自定义 pg_hba.conf 认证选项(Jacob Champion)§

  • 允许 OAUTH 验证器提供失败细节(Jacob Champion)§

    通过设置 ValidatorModuleResult 结构成员 error_detail 实现。

  • 允许 libpq 环境变量 PGOAUTHDEBUG 指定具体调试选项(Zsolt Parragi,Jacob Champion)§

    UNSAFE 选项仍会生成全部调试输出。

E.1.3.7. psql #

  • 允许通过 "%S" 在 psql 提示符中显示 search_path(Florents Tselai)§

    这在 psql 连接到 Postgres 18 或更高版本时有效。

  • 允许通过 "%i" 在 psql 提示符中显示热备状态(Jim Jones)§

  • 修改 psql 反斜杠命令,以显示发布、订阅和扩展统计信息的注释(Fujii Masao,Jim Jones)§

    受影响的命令为 \dRp+、\dRs+ 和 \dX+。

  • 允许在 psql 中控制 boolean 值的显示方式(David G. Johnston)§

    \pset 变量为 display_true 和 display_false。

  • 新增 psql 变量 SERVICEFILE,用于引用 service file 位置(Ryo Kanbayashi)§

  • 允许 psql 更准确地判断是否需要 pager(Erik Wienhold)§

  • 新增或改进 psql tab completion(Yamaguchi Atsuo,Yugo Nagata,Haruna Miwa,Xuneng Zhou,Dagfinn Ilmari Mannsåker,Fujii Masao,Álvaro Herrera,Jian He,Tatsuya Kawata,Ian Lawrence Barwick,Vasuki M)§§§§§§§§§§§§§§

E.1.3.8. 服务器应用程序 #

  • 将 vacuumdb 的 --analyze-only 选项改为在未指定目标时也分析分区表(Laurenz Albe,Mircea Cadariu)§

    此前它会跳过分区表。现在与 ANALYZE 的行为一致。

  • 允许 vacuumdb 使用 --dry-run 选项报告将要执行的命令而不实际运行(Corey Huinker)§

  • 允许 pg_verifybackup 读取存储在 tar 归档中的 WAL 文件(Amul Sul)§

    新增 --wal-path 选项,作为现有且已弃用的 --wal-directory 选项的别名。

  • 允许 pg_waldump 读取存储在 tar 归档中的 WAL 文件(Amul Sul)§

  • 新增 pgbench 选项 --continue-on-error,以在 SQL 错误后继续执行(Rintaro Ikeda,Yugo Nagata,Fujii Masao)§

  • 改进 pg_test_timing 的可用性(Hannu Krosing,Tom Lane)§§

    现在报告纳秒而不是微秒;除直方图输出外,还会输出第二张精确计时表,并可通过 --cutoff 指定可选截断。

  • 允许 pg_dumpall 生成非文本格式输出(Mahendra Singh Thalor,Andrew Dunstan)§§

    新的输出格式为 custom、directory 或 tar。

  • 允许 pg_dump 包含可恢复的扩展统计信息(Corey Huinker)§

E.1.3.8.2. pg_upgrade #
  • 让 pg_upgrade 复制大对象元数据文件,而不是使用 COPY(Nathan Bossart)§§

    从 Postgres 16 及更高版本升级时可用。

  • 允许 pg_upgrade 对大对象元数据使用 COPY(Nathan Bossart)§

    在从 Postgres 主版本 12-15 升级时使用。

  • 改进 pg_upgrade 在为 11 及更早版本源服务器恢复大对象元数据时的性能(Nathan Bossart)§

  • 允许 pg_upgrade 处理存放在 PGDATA 目录中的非默认表空间(Nathan Bossart)§

    此前这类表空间会报错。

E.1.3.8.3. 逻辑复制应用程序 #
  • 允许 pg_createsubscriber 忽略已存在的指定发布(Shubham Khanna)§

    此前这会报错。

  • 更改 pg_createsubscriber 存储恢复参数的方式(Alyona Vinter)§

    变更会存放在可选包含的 pg_createsubscriber.conf 中,而不是直接写入 postgresql.auto.conf。

  • 新增 pg_createsubscriber 选项 -l/--logdir,用于把输出重定向到文件(Gyan Sreejith,Hayato Kuroda)§

E.1.3.9. 源代码 #

  • 恢复对 AIX 的支持(Aditya Kamath,Srirama Kucherlapati,Peter Eisentraut)§§

    这使用 gcc,并且只支持 64 位构建。

  • 将 Solaris 改为使用未命名 POSIX semaphore(Tom Lane)§

    此前使用的是 System V semaphore。

  • 要求 Visual Studio 2019 或更高版本(Peter Eisentraut)§

  • 允许 MSVC 使用 Python Limited API 构建 PL/Python(Bryan Green)§

  • 允许使用 MSVC 在 AArch64 上构建(Niyas Sait,Greg Burd,Dave Cramer)§

  • 允许在 Windows 上使用 DbgHelp 获取执行栈回溯(Bryan Green)§

  • 将支持的 C 语言版本改为 C11(Peter Eisentraut)§§

    此前使用 C99。

  • 在可用时使用标准 C23 和 C++ 属性(Peter Eisentraut)§

  • 允许 ICU 与 C++ 编译器模式一起使用(John Naylor)§

  • 在可用时用 AVX2 指令计算页面校验和(Matthew Sterrett,Andrew Kim)§

  • 在可用时使用 ARM Crypto Extension 计算 CRC32C(John Naylor)§

  • 使用 SIMD 指令改进 hex_encode() 和 hex_decode()(Nathan Bossart,Chiranmoy Bhattacharya)§

  • 要求 Meson 版本 0.57.2 或更高(Peter Eisentraut)§

  • 新增 Meson 选项,用于同时构建 shared 和 static library,或仅构建 shared(Peter Eisentraut)§

  • 更新 Unicode 数据到 17.0.0 版(Peter Eisentraut)§

  • 新增钩子 planner_setup_hook 和 planner_shutdown_hook(Robert Haas)§

  • 允许扩展用 SQL 查询替换 FROM 子句中的返回集合函数(Paul A. Jungwirth)§

  • 将 multixid 成员改为 64 位(Maxim Orlov)§

  • 为 hash 索引访问方法新增 fake LSN 支持(Peter Geoghegan)§

  • 将 FDW 函数原型中的 bit* typedef 改为 uint*(Nathan Bossart)§

  • 允许逻辑解码插件指定其是否不访问共享目录(Antonin Houska)§

  • 新增简化且改进的共享内存注册函数 ShmemRequestStruct(Heikki Linnakangas,Ashutosh Bapat)§

    ShmemInitStruct() 和 ShmemInitHash() 仍保留以兼容旧代码。

  • 新增服务器变量 debug_exec_backend,用于报告参数如何传递给新后端(Daniel Gustafsson)§

  • 记录控制回归测试的环境变量(Michael Paquier)§

  • 新增关于 temporal tables 的文档章节(Paul A. Jungwirth)§

  • 更新文档中的 systemd 示例,加入 restart 设置(Andrew Jackson)§

E.1.3.10. 附加模块 #

  • 新增 pg_plan_advice 模块,用于稳定和控制规划器决策(Robert Haas)§§

  • 新增扩展 pg_stash_advice,用于按 query-id 指定建议(Robert Haas,Lukas Fittl)§§

  • 重构 pg_buffercache 的共享内存映射报告(Bertrand Drouvot)§

    新增函数 pg_buffercache_os_pages() 和系统视图 pg_buffercache_os_pages,用于报告共享内存映射;函数还可选包含 NUMA 细节。为向后兼容,pg_buffercache_numa_pages() 仍然保留。

  • 为 pg_buffercache 新增将 buffer 标记为 dirty 的函数(Nazir Bilal Yavuz)§

    这些函数为 pg_buffercache_mark_dirty()、pg_buffercache_mark_dirt_relation() 和 pg_buffercache_mark_dirty_all()。

  • 允许在预备语句中向 postgres_fdw 服务器下推数组比较(Alexander Pyhalov)§

  • 允许从外部数据包装器服务器获取统计信息(Corey Huinker,Etsuro Fujita)§

    postgres_fdw 通过 restore_stats 选项启用此功能。默认情况下,ANALYZE 会从远端服务器取回行并在本地生成统计信息。

  • 允许 file_fdw 读取使用多行 HEADER 的文件或程序输出(Shinya Kato)§

  • 新增服务器变量 auto_explain.log_io,为 auto_explain 添加 IO 报告(Tomas Vondra)§

  • 允许 auto_explain 通过服务器变量 auto_explain.log_extension_options 添加扩展特定的 EXPLAIN 选项(Robert Haas)§

  • 允许 btree_gin 匹配部分限定条件(Tom Lane)§§

  • 通过流式读取改进 bloom 索引性能(Xuneng Zhou)§§

  • 通过流式读取改进 pgstattuple 性能(Xuneng Zhou)§

  • 允许 fuzzystrmatch 的 dmetaphone 使用 ASCII 以外的单字节编码(Peter Eisentraut)§

  • 修改 oid2name --extended 以报告关系文件路径(David Bidoc)§

E.1.3.10.1. pg_stat_statements #
  • 在 pg_stat_statements 中将 FETCH 查询的大小显示为常量(Sami Imseih)§

    不同大小的 FETCH 现在会在 pg_stat_statements 输出中归并到一起。

  • 在 pg_stat_statements 中新增 generic plan 和 custom plan 计数(Sami Imseih)§

E.1.4. 致谢 #

以下人员(按字母顺序)以补丁作者、提交者、审阅者、测试者或问题报告者的身份为本次发布做出了贡献。

稍后补充