E.1. 发布版本 19 #
发布日期:. 2026-??-??,截至 2026-09-14
E.1.1. 概览 #
PostgreSQL 19 包含许多新特性和增强,包括:
新增
REPACK命令,用于回收磁盘空间并重新组织表内容,它结合了现有VACUUM FULL和CLUSTER命令的功能。其CONCURRENTLY选项允许在不阻塞对表的读写操作的情况下执行REPACK。逻辑复制现在可以复制序列值,并且当 wal_level 设置为
replica时,可以在不重启服务器的情况下启用逻辑复制。新增
WAIT命令,它会等待备库重放到指定位置,从而在备库查询中支持“读己之写”模式。新增 pg_plan_advice 扩展,用于稳定和控制查询规划器的决策;同时新增配套的 pg_stash_advice 扩展,用于按查询自动应用这些建议。
改进了多个方面的性能,包括自动调整 I/O 工作进程数量、加快外键检查,以及进一步优化规划和执行。
上述条目以及 PostgreSQL 19 的其他新特性,在下面各节中会作更详细的说明。
E.1.2. 迁移到版本 19 #
对于想从任何先前版本迁移数据的用户,需要使用 pg_dumpall 执行导出/恢复,或者使用 pg_upgrade,或者使用逻辑复制。有关迁移到新主版本的一般信息,请参见第 18.6 节。
19 版本包含若干可能影响与先前版本兼容性的更改。请注意以下不兼容项:
新增服务器变量
password_expiration_warning_threshold,用于提示密码即将过期(Gilles Darold,Nathan Bossart)§默认警告期为七天。
在成功完成 MD5 密码认证后发出警告(Nathan Bossart)§
可以通过服务器变量
md5_password_warnings禁用该警告。MD5 密码已在 PostgreSQL 18 中被标记为弃用。移除 RADIUS 支持(Thomas Munro)§
PostgreSQL 只支持通过 UDP 的 RADIUS,而这存在无法修复的安全问题。
强制数据库服务器中的
standard_conforming_strings始终为on(Tom Lane)§使用 PostgreSQL 19 之前版本的 pg_dump 或 pg_dumpall 创建、且使用了
standard_conforming_strings = off的转储,将无法正确载入 PostgreSQL 19 及更高版本的服务器。用户应使用这些应用程序的 PostgreSQL 19 或更高版本创建转储,或者使用standard_conforming_strings = on。为了兼容旧服务器,客户端应用程序仍然支持在
standard_conforming_strings = off的服务器上执行操作。服务器变量escape_string_warning已被移除,因为已无必要。禁止数据库名、角色名和表空间名中出现回车和换行(Mahendra Singh Thalor)§
这样做是为了避免安全问题。pg_upgrade 也会拒绝升级那些使用此类名称的数据库集簇。
将
inet和cidr数据类型的默认索引操作符类从 btree_gist 改为 GiST(Tom Lane)§ §btree_gist 的
inet/cidr操作符类存在缺陷,因为它们可能排除本应返回的行。pg_upgrade 将拒绝升级包含 btree_gistinet/cidr索引的数据库集簇。禁止在
COPY FROM ... WHERE中使用系统列(Tom Lane)§这些列的值并未明确定义。
将不返回任何行的
json_array()调用改为返回空 JSON 数组(Richard Guo)§此前会返回
NULL。让事务把其
READ ONLY和DEFERRABLE状态传递给 postgres_fdw 会话(Etsuro Fujita)§这意味着
READ ONLY事务将不能再修改由 postgres_fdw 会话处理的行。将
max_locks_per_transaction的默认值从 64 改为 128(Heikki Linnakangas)§锁大小分配方式已经改变,因此要达到与先前版本相同的容量,实际上现在必须将设置值翻倍。
之前 JIT 默认启用,并根据优化器代价决定是否激活。不幸的是,这种代价估算被认为并不可靠,因此需要大量运行大型分析查询的站点手工启用 JIT。
将
sync_error_count重命名为sync_table_error_count,该列位于系统视图pg_stat_subscription_stats中(Vignesh C)§这是因为现在会单独跟踪序列错误。
将等待事件类型
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,Richard Guo)§允许在唯一内侧的
ANTI JOIN中使用 Memoize(Richard Guo)§允许在连接之前先执行某些聚合处理(Richard Guo,Antonin Houska)§§§
这可以减少需要处理的行数。
改进哈希连接对带
NULL连接键元组的处理(Tom Lane)§改进半连接规划(Richard Guo)§
允许 Append 和 MergeAppend 考虑显式增量排序(Richard Guo)§
在常量折叠期间将
IS [NOT] DISTINCT FROM NULL转换为IS [NOT] NULL(Richard Guo)§后一种形式更易优化。
当输入被证明非空时,将
IS [NOT] DISTINCT FROM简化为等值/不等值操作符(Richard Guo)§在优化器中更早地对
varIS [NOT] NULL做常量折叠(Richard Guo)§这为后续优化创造了条件。
简化
COALESCE()和ROW(...) IS [NOT] NULL,以避免求值不必要的参数(Richard Guo)§§当输入被证明非空时,将
IS [NOT] TRUE/FALSE/UNKNOWN简化为普通 boolean 表达式(Richard Guo)§加快大统计目标下的连接选择率计算(Ilia Evdokimov,David Geier)§
为返回 boolean 值的函数启用正确的优化器统计信息(Tom Lane)§
允许
pg_restore_extended_stats()恢复优化器扩展统计信息(Corey Huinker,Michael Paquier,Chao Li)§§§§新增函数
pg_clear_extended_stats()用于删除扩展统计信息(Corey Huinker,Michael Paquier)§调整优化器,使其在部分路径决策时考虑启动代价(Robert Haas,Tomas Vondra)§
允许
pg_aggregate.aggtransspace为负值,以表示内存使用没有上限(Richard Guo)§该信息会被优化器用于规划内存使用。
E.1.3.1.2. 常规性能 #
允许
io_method= "worker" 自动控制所需后台工作进程(Thomas Munro)§新增服务器变量
io_min_workers、io_max_workers、io_worker_idle_timeout和io_worker_launch_interval。允许查询中的表扫描在可见性映射中将页面标记为全可见(Melanie Plageman)§
此前只有
VACUUM和COPY ... FREEZE可以做到这一点。允许自动清理使用
并行自动清理工作进程(Daniil Davydov)§§工作进程的最大数量由服务器变量
autovacuum_max_parallel_workers和每表存储参数autovacuum_parallel_workers控制。使用 SIMD CPU 指令提升
COPY FROM处理文本和 CSV 输入的性能(Nazir Bilal Yavuz,Shinya Kato)§改进
NOTIFY,使其只唤醒正在监听指定通知的后端(Joel Jacobson)§此前大多数后端都会被
NOTIFY唤醒。将
wal_compression等于on时的行为改为使用可用的最佳 WAL 压缩方法(wenhui qiu)§此前始终使用
pglz。将 TOAST 压缩默认方法从
pglz改为更高效的lz4(Euler Taveira)§通过修改服务器变量
default_toast_compression的默认值实现。改进内部行展开性能(David Rowley)§
改进重复执行 UTF-8 大小写折叠操作的性能(Andreas Karlsson)§
使用基数排序改进排序性能(John Naylor)§
改进计时性能测量(Lukas Fittl、Andres Freund、David Geier)§§
这有利于
EXPLAIN (ANALYZE, TIMING)和 pg_test_timing,并由服务器变量timing_clock_source控制。
E.1.3.1.3. 系统视图 #
新增系统视图
pg_stat_lock和函数pg_stat_get_lock(),用于报告每种锁类型的统计信息(Bertrand Drouvot)§新增系统视图
pg_stat_recovery,用于报告恢复状态(Xuneng Zhou,Shinya Kato)§§新增系统视图
pg_stat_autovacuum_scores,用于报告每表自动清理细节(Sami Imseih)§新增系统视图
pg_dsm_registry_allocations,用于报告动态共享内存细节(Florents Tselai,Nathan Bossart)§§在系统视图
pg_stat_progress_vacuum中新增清理启动细节(Shinya Kato)§新的
started_by列报告清理的发起者,mode则表示其激进程度。在系统视图
pg_stat_progress_analyze中新增分析启动细节(Shinya Kato)§新的
started_by列报告分析的发起者。新增
mem_exceeded_count列到系统视图pg_stat_replication_slots(Bertrand Drouvot)§它用于报告
logical_decoding_work_mem被超过的次数。在
pg_stat_replication_slots和pg_replication_slots中新增复制槽同步跳过信息(Shlok Kyal)§§§新增列为
slotsync_skip_count、slotsync_last_skip和slotsync_skip_reason。新增
update_deleted列到系统视图pg_stat_subscription_stats(Zhijie Hou)§该列报告因并发删除而忽略更新的行数。这要求订阅者启用
retain_dead_tuples。新增
sync_seq_error_count列到系统视图pg_stat_subscription_stats,用于报告序列同步错误(Vignesh C)§§新增
stats_reset列到系统视图pg_stat_all_tables、pg_stat_all_indexes和pg_statio_all_sequences(Bertrand Drouvot,Sami Imseih,Shihao Zhong)§它也出现在
sys和user变体视图中。新增
stats_reset列到系统视图pg_stat_user_functions和pg_stat_database_conflicts(Bertrand Drouvot,Shihao Zhong)§§新增
location列到系统视图pg_available_extensions和pg_available_extension_versions,用于报告扩展所在的文件系统目录(Matheus Alcantara)§新增
backup_type列到系统视图pg_stat_progress_basebackup,用于报告备份类型(Shinya Kato)§可能的值为
full或incremental。新增
connecting值到系统视图列pg_stat_wal_receiver.status(Xuneng Zhou)§新增对写入 WAL 的整页镜像字节数的报告(Shinya Kato)§
可通过系统视图
pg_stat_wal和函数pg_stat_get_backend_wal()访问。在系统视图
pg_stats、pg_stats_ext和pg_stats_ext_exprs中新增列(Corey Huinker)§新增表
OID和属性号列到pg_stats,并为另外两个视图新增表OID和统计对象OID列。为范围类型的扩展统计信息在系统视图
pg_stats_ext_exprs中新增相关信息(Corey Huinker,Michael Paquier)§
E.1.3.1.4. 监控 #
允许按进程类型指定
log_min_messages日志级别(Euler Taveira)§新格式为 "
type:level"。不带冒号的值控制所有进程类型,以保持向后兼容。新增服务器变量
log_autoanalyze_min_duration,用于记录自动清理执行的耗时较长的分析操作(Shinya Kato)§服务器变量
log_autovacuum_min_duration现在只控制自动清理执行的清理操作日志。默认启用服务器变量
log_lock_waits(Laurenz Albe)§新增服务器变量
debug_print_raw_parse,用于记录原始解析树(Chao Li)§当服务器以 debug 级别 3 及以上启动时,也会启用该输出。
让来自远端服务器的消息以与本地服务器消息相同的格式出现在服务器日志中(Vignesh C)§
这包括 replication、postgres_fdw 和 dblink 服务器。
为
COPY FROM/TO在管道、文件或程序上新增 I/O 等待事件(Nikolay Samokhvalov)§新增 commit_delay 以及 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. 服务器配置 #
新增评分系统,用于控制自动清理处理表的顺序(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 验证器注册自定义
pg_hba.conf认证选项(Jacob Champion,Zsolt Parragi)§允许角色
pg_read_all_data和pg_write_all_data读写大对象(Nitin Motiani,Nathan Bossart)§这些角色旨在允许非超级用户运行 pg_dump。
允许配置后台工作进程,使其在数据库级操作之前终止(Aya Iwata)§
由于现在可以终止造成阻塞的后台工作进程,数据库级操作可以更快完成。
将 GB18030 编码从 2000 版更新到 2022 版(Chao Li,Zheng Tao)§
兼容性细节请参见提交说明。
新增
WAIT命令,允许备库等待 LSN 值被写入、刷盘或重放(Kartyshov Ivan,Alexander Korotkov,Xuneng Zhou)§ §改进
pg_sync_replication_slots(),使其等待同步完成(Ajin Cherian,Zhijie Hou)§此前某些同步失败不会被报告。
新增服务器变量
wal_sender_shutdown_timeout,用于限制关闭期间的副本同步等待(Andrey Silitskiy,Hayato Kuroda)§默认情况下,sender 仍会一直等待同步。
允许订阅者中存储的序列值与发布者一致(Vignesh C)§§§
可在
CREATE SUBSCRIPTION、ALTER SUBSCRIPTION ... REFRESH PUBLICATION和ALTER SUBSCRIPTION ... REFRESH SEQUENCES中启用。后者只更新值,不更新序列存在性。函数pg_get_sequence_data()可用于检查序列同步。允许
CREATE/ALTER PUBLICATION发布所有序列(Vignesh C,Tomas Vondra)§此功能通过
ALL SEQUENCES子句启用。允许针对发布执行
ALTER SUBSCRIPTION,以同步订阅端上的序列存在性,使其与发布端一致(Vignesh C)§通过
REFRESH SEQUENCES子句启用此功能。允许
CREATE/ALTER PUBLICATION排除某些表(Vignesh C,Shlok Kyal)§§§§该功能通过
EXCEPT子句控制,在指定ALL TABLES时尤其有用。为
CREATE/ALTER SUBSCRIPTION新增设置retain_dead_tuples,用于保留冲突检测所需的信息(Zhijie Hou)§ § §同时新增设置
max_retention_duration,用于限制retain_dead_tuples的保留时间。允许
CREATE SUBSCRIPTION使用 postgres_fdw 外部数据包装器连接参数(Jeff Davis)§连接参数通过
CREATE SUBSCRIPTION ... SERVER引用。当
wal_level为 "replica" 时,允许在需要时自动启用逻辑复制(Masahiko Sawada)§新增的服务器变量
effective_wal_level,以及程序 pg_controldata 和函数pg_control_checkpoint(),都会报告有效 WAL 级别。允许按订阅和用户设置
wal_receiver_timeout(Fujii Masao)§§这允许不同订阅端使用不同的
wal_receiver_timeout值。新增可选 pid 参数到
pg_replication_origin_session_setup(),以允许 SQL 级复制方案并行化(Doruk Yilmaz,Hayato Kuroda)§
E.1.3.2. 查询命令 #
允许
GROUP BY处理目标列表中的子查询,即使其中的表达式引用了子查询之外的列(Tom Lane)§同时修复了
GROUPING()处理目标列表中的子查询别名时的一个 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。允许
GRANT/REVOKE指定执行权限调整的有效角色(Nathan Bossart,Tom Lane)§通过
GRANTED BY子句控制。支持在
CREATE SCHEMA内的FOREIGN KEY约束子句中使用前向引用(Jian He,Tom Lane)§允许
CHECKPOINT接受选项列表(Christoph Berg)§§§支持的选项为
MODE和FLUSH_UNLOGGED。新增
CONNECTION子句到CREATE FOREIGN DATA WRAPPER,用于指定将为订阅连接参数调用的函数(Jeff Davis,Noriyoshi Shinoda)§§为
CREATE AGGREGATE新增SUPPORT子句,使扩展可以指定支持函数来优化聚合调用(Tom Lane)§在
VACUUM (VERBOSE)和自动清理日志中新增内存使用和并行度报告(Tatsuya Kawata,Daniil Davydov)§§
允许使用
ALTER TABLE ALTER CONSTRAINT ... [NOT] ENFORCED修改CHECK约束(Jian He)§此前只有外键约束支持更改强制执行状态。
允许在虚拟列上成功执行
ALTER TABLE ... COLUMN SET EXPRESSION,即使它带有CHECK约束(Jian He)§此前这是被禁止的。
允许
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 输出生成为单个 JSON 数组,方法是使用
COPY选项FORCE_ARRAY。允许
COPY TO处理分区表(Jian He,Ajin Cherian)§§此前必须使用
COPY (SELECT ...)才能输出分区表。这也改进了逻辑复制中的表同步。
E.1.3.4. 数据类型 #
新增更多
jsonpath字符串方法(Florents Tselai,David E. Wheeler)§包括
ltrim()、rtrim()、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. 函数 #
新增
date、timestamp和timestamptz版本的random(min, max)(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)§荷兰语词干分析器也已更新。旧版荷兰语词干分析器可通过
dutch_porter使用。
允许 libpq 连接通过 "
servicefile" 指定服务文件(Torsten Förtsch,Ryo Kanbayashi)§新增用于兼容性测试的特殊 libpq 协议参数(Jelte Fennema-Nio,Jacob Champion)§
这也称为 protocol grease,曾在 19 beta 期间启用。从 PostgreSQL 19 正式版开始将不再发送这些参数,但相关参数保留项仍会保留,以备将来使用。
新增 libpq 连接参数
oauth_ca_file,用于在与 OAuth 提供者通信时指定其他证书颁发机构(Jonathan Gonzalez V.,Jacob Champion)§也可以通过环境变量
PGOAUTHCAFILE设置。默认使用 curl 内置证书。允许 libpq 环境变量
PGOAUTHDEBUG指定具体调试选项(Zsolt Parragi,Jacob Champion)§UNSAFE选项仍会生成全部调试输出。改进自定义 OAuth 客户端流程(Jacob Champion)§ §
此前,自定义流程失败时 libpq 只报告一条通用错误消息,并且每个流程实现都必须独立计算 issuer 标识符。新增 authdata 钩子类型
PQAUTHDATA_OAUTH_BEARER_TOKEN_V2,它会预先计算 issuer ID,并允许钩子提供错误细节。新增 libpq 函数
PQgetThreadLock(),用于获取当前锁回调(Jacob Champion)§
允许 psql 通过
%S在提示符中显示 search_path(Florents Tselai)§这在 psql 连接到 PostgreSQL 18 或更高版本时有效。
允许在 psql 中控制 boolean 值的显示方式(David G. Johnston)§
\pset 变量为
display_true和display_false。新增 psql 变量
SERVICEFILE,用于引用服务文件位置(Ryo Kanbayashi)§新增或改进 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和--analyze-in-stages选项,使其在未指定目标时也分析分区表(Laurenz Albe,Mircea Cadariu,Chao Li)§ §此前它会跳过分区表。现在其行为与
ANALYZE一致。允许 pg_verifybackup 读取 WAL 文件,这些文件存储在 tar 归档中(Amul Sul)§
新增
--wal-path选项,作为现有且已弃用的--wal-directory选项的别名。允许 pg_waldump 读取 WAL 文件,这些文件存储在 tar 归档中(Amul Sul)§
改进 pg_upgrade 复制大对象元数据的性能(Nathan Bossart)§ § § §
根据旧集簇的 PostgreSQL 版本采用不同的方法。
允许 pg_upgrade 处理存放在
PGDATA目录中的非默认表空间(Nathan Bossart)§此前这类表空间会报错。
新增 pgbench 选项
--continue-on-error,以在 SQL 错误后继续执行(Rintaro Ikeda,Yugo Nagata,Fujii Masao)§改进 pg_test_timing 的可用性(Hannu Krosing,Tom Lane)§§
现在报告纳秒而不是微秒;除直方图输出外,还会输出第二张精确计时表,并可通过
--cutoff指定可选截断。
E.1.3.8.1. pg_createsubscriber #
允许 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 信号量(Tom Lane)§
此前使用的是 System V 信号量。
要求 Visual Studio 2019 或更高版本(Peter Eisentraut)§
允许 MSVC 为 PL/Python 使用 Python Limited API 进行构建(Bryan Green)§
将支持的 C 语言版本改为 C11(Peter Eisentraut)§§
此前使用 C99。
在可用时使用标准 C23 和 C++ 属性(Peter Eisentraut)§
使用 ARM Crypto Extension 计算 CRC32C(John Naylor)§
修改
hex_encode()和hex_decode(),使其使用 SIMD CPU 指令(Nathan Bossart,Chiranmoy Bhattacharya)§新增 Meson 选项,用于同时构建共享库和静态库,或仅构建共享库(Peter Eisentraut)§
新增钩子
planner_setup_hook、planner_shutdown_hook、joinrel_setup_hook和join_path_setup_hook(Robert Haas)§ §将 multixid 成员改为 64 位(Maxim Orlov)§
将函数原型中的
bit*typedef 改为uint*(Nathan Bossart)§允许 OAuth 验证器提供失败细节(Jacob Champion)§
通过设置
ValidatorModuleResult结构体成员 error_detail 实现。新增简化且改进的共享内存注册函数
ShmemRequestStruct()(Heikki Linnakangas,Ashutosh Bapat)§ShmemInitStruct()和ShmemInitHash()仍保留以兼容旧代码。新增服务器变量
debug_exec_backend,用于报告参数如何传递给新后端(Daniel Gustafsson)§更新文档中的 systemd 示例,加入 restart 设置(Andrew Jackson)§
E.1.3.10. 附加模块 #
新增 pg_plan_advice 模块,用于稳定和控制规划器决策(Robert Haas)§§
新增扩展 pg_stash_advice,用于按 query-id 指定建议(Robert Haas,Lukas Fittl)§§
将
FETCH查询的大小作为常量显示在 pg_stat_statements 中(Sami Imseih)§不同大小的 FETCH 现在会在 pg_stat_statements 输出中归并到一起。
新增通用计划和自定义计划计数到 pg_stat_statements(Sami Imseih)§
重构 pg_buffercache 的共享内存映射报告(Bertrand Drouvot)§
新增函数
pg_buffercache_os_pages()和系统视图pg_buffercache_os_pages,用于报告共享内存映射;函数还可选包含 NUMA 细节。为向后兼容,pg_buffercache_numa_pages()仍然保留。为 pg_buffercache 新增将缓冲区标记为脏的函数(Nazir Bilal Yavuz)§
这些函数为
pg_buffercache_mark_dirty()、pg_buffercache_mark_dirty_relation()和pg_buffercache_mark_dirty_all()。允许在预备语句中向 postgres_fdw 外部服务器下推数组比较(Alexander Pyhalov)§
允许从外部数据包装器服务器获取统计信息(Corey Huinker,Etsuro Fujita)§§
postgres_fdw 通过
import_stats选项启用此功能。默认情况下,ANALYZE会从远端服务器取回行并在本地生成统计信息。新增服务器变量
auto_explain.log_io,为 auto_explain 添加 IO 报告(Tomas Vondra)§允许 auto_explain 添加扩展特定的
EXPLAIN选项,并通过服务器变量auto_explain.log_extension_options控制(Robert Haas)§使用流式读取改进 pgstattuple 的性能(Xuneng Zhou)§ §
允许 fuzzystrmatch 的
dmetaphone()使用 ASCII 以外的单字节编码(Peter Eisentraut)§