2025年9月25日: PostgreSQL 18 发布!
支持版本:当前 (18)

E.1. 发布18 #

发布日期:2025-09-25

E.1.1. 概述 #

PostgreSQL 18 包含许多新特性和增强功能,包括

下面几节将更详细地解释上述项目以及 PostgreSQL 18 的其他新特性。

E.1.2. 迁移到版本18 #

对于希望从任何以前的版本迁移数据的人来说,需要使用 pg_dumpall 进行转储/恢复,或者使用 pg_upgrade 或逻辑复制。有关迁移到新主要版本的通用信息,请参阅 第 18.6 节

版本18包含许多可能影响与以前版本兼容性的更改。请注意以下不兼容性

  • initdb 默认更改为启用数据校验和(Greg Sabino Mullane) §

    可以使用新的 initdb 选项 --no-data-checksums 禁用校验和。pg_upgrade 要求匹配集群校验和设置,因此这个新选项对于升级不带校验和的旧集群很有用。

  • 更改时区缩写处理(Tom Lane) §

    系统现在将优先考虑当前会话的时区缩写,然后检查服务器变量 timezone_abbreviations。以前是先检查 timezone_abbreviations

  • 弃用 MD5 密码认证(Nathan Bossart) §

    对 MD5 密码的支持将在未来的主要版本中移除。CREATE ROLEALTER ROLE 现在在设置 MD5 密码时会发出弃用警告。可以通过将 md5_password_warnings 参数设置为 off 来禁用这些警告。

  • 更改 VACUUMANALYZE 以处理父表的继承子表(Michael Harris) §

    可以使用新的 ONLY 选项执行以前的行为。

  • 防止 COPY FROM 在读取文件时将 \. 视为文件结束标记CSV文件(Daniel Vérité, Tom Lane) § §

    psql 在从 STDIN 读取文件时仍会将 \. 视为文件结束标记。CSV较旧的 psql 客户端连接到 PostgreSQL 18 服务器可能会遇到 \copy 问题。此版本还强制要求 \. 必须单独出现在一行中。

  • 禁止未记录的分区表(Michael Paquier) §

    以前 ALTER TABLE SET [UN]LOGGED 不执行任何操作,并且创建未记录的分区表也不会导致其子表未记录。

  • 在触发器事件排队时处于活动状态的角色执行 AFTER 触发器(Laurenz Albe) §

    以前,此类触发器在触发器执行时(例如,在 COMMIT 时)处于活动状态的角色运行。这对于在排队时间和事务提交之间角色发生变化的情况很重要。

  • 移除 GRANT/REVOKE 中规则权限的非功能性支持(Fujii Masao) §

    PostgreSQL 8.2 以来,这些功能一直是非功能性的。

  • 移除列 pg_backend_memory_contexts.parent(Melih Mutlu) §

    由于添加了 pg_backend_memory_contexts.path,不再需要此功能。

  • pg_backend_memory_contexts.levelpg_log_backend_memory_contexts() 更改为从1开始(Melih Mutlu, Atsushi Torikoshi, David Rowley, Fujii Masao) § § §

    这些以前是从零开始的。

  • 更改 全文搜索 以使用集群的默认排序规则提供程序来读取配置文件和字典,而不是始终使用 libc(Peter Eisentraut) §

    默认使用非 libc 排序规则提供程序(例如 ICU,内置)的集群,对于 LC_CTYPE 处理的字符,其行为可能与 libc 不同,可能会在某些全文搜索函数以及 pg_trgm 扩展的行为中观察到变化。使用 pg_upgrade 升级此类集群时,建议在升级后重新索引所有与全文搜索和 pg_trgm 相关的索引。

E.1.3. 变更 #

下面您将找到 PostgreSQL 18 与以前主要版本之间变化的详细说明。

E.1.3.1. 服务器 #

E.1.3.1.1. 优化器 #
  • 自动删除一些不必要的表自连接(Andrey Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina) §

    可以使用服务器变量 enable_self_join_elimination 禁用此优化。

  • 将一些 IN (VALUES ...) 转换为 x = ANY ... 以获得更好的优化器统计信息(Alena Rybakina, Andrei Lepikhov) §

  • 允许将 OR 子句转换为数组以加快索引处理(Alexander Korotkov, Andrey Lepikhov) §

  • 加快 INTERSECTEXCEPT窗口聚合视图列别名的处理速度(Tom Lane, David Rowley) § § § §

  • 允许 SELECT DISTINCT 的键在内部重新排序以避免排序(Richard Guo) §

    可以使用 enable_distinct_reordering 禁用此优化。

  • 忽略功能上依赖于其他列的 GROUP BY 列(Zhang Mingli, Jian He, David Rowley) §

    如果 GROUP BY 子句包含唯一索引的所有列以及同一表的其他列,则这些其他列是冗余的,可以从分组中删除。对于非延迟主键,这已经成立。

  • 允许将 HAVING 子句中某些 GROUPING SETS 推送到 WHERE 子句(Richard Guo) § § § §

    这允许更早地进行行过滤。此版本还修复了一些以前返回不正确结果的 GROUPING SETS 查询。

  • 改进使用 numerictimestamp 值的 generate_series() 的行估计(David Rowley, Song Jinzhou) § §

  • 允许优化器使用 Right Semi Join 计划(Richard Guo) §

    半连接用于查找是否存在至少一个匹配项。

  • 允许合并连接使用 增量排序(Richard Guo) §

  • 提高访问多个分区的查询规划效率(Ashutosh Bapat, Yuya Watari, David Rowley) § §

  • 在更多情况下允许 分区式连接,并减少其内存使用(Richard Guo, Tom Lane, Ashutosh Bapat) § §

  • 改进分区查询的成本估算(Nikita Malakhov, Andrei Lepikhov) §

  • 改进 SQL 语言函数计划缓存(Alexander Pyhalov, Tom Lane) § §

  • 改进禁用优化器功能的处理(Robert Haas) §

E.1.3.1.2. 索引 #
  • 允许 btree 索引的跳过扫描(Peter Geoghegan) § §

    这允许在更多情况下使用多列 B 树索引,例如当对第一个或早期索引列没有限制(或存在非相等限制)时,并且对后续索引列存在有用限制。

  • 允许非 B 树唯一索引用作分区键和物化视图(Mark Dilger) § §

    索引类型仍必须支持相等性。

  • 允许并行创建 GIN 索引(Tomas Vondra, Matthias van de Meent) §

  • 允许对值进行排序以加快范围类型 GiSTbtree 索引构建(Bernd Helmle) §

E.1.3.1.3. 总体性能 #
  • 添加异步 I/O 子系统(Andres Freund, Thomas Munro, Nazir Bilal Yavuz, Melanie Plageman) § § § § § § § § § § §

    此功能允许后端排队多个读取请求,从而实现更高效的顺序扫描、位图堆扫描、清理等。这由服务器变量 io_method 启用,并添加了服务器变量 io_combine_limitio_max_combine_limit 来控制它。这还使得对于不支持 fadvise() 的系统,effective_io_concurrencymaintenance_io_concurrency 的值大于零成为可能。新的系统视图 pg_aios 显示用于异步 I/O 的文件句柄。

  • 改进访问许多关系查询的锁定性能(Tomas Vondra) §

  • 提高哈希连接和 GROUP BY 的性能并减少内存使用(David Rowley, Jeff Davis) § § § § §

    这也改进了 EXCEPT 使用的哈希集操作和子计划值的哈希查找。

  • 允许普通清理冻结某些页面,即使它们都是可见的(Melanie Plageman) § §

    这减少了后期全关系冻结的开销。其激进性可以通过服务器变量和每表设置 vacuum_max_eager_freeze_failure_rate 控制。以前,在需要冻结之前,清理从不处理所有可见页面。

  • 添加服务器变量 vacuum_truncate 以控制 VACUUM 期间的文件截断(Nathan Bossart, Gurjeet Singh) §

    已经存在一个具有相同名称和行为的存储级别参数。

  • 将服务器变量 effective_io_concurrencymaintenance_io_concurrency 的默认值增加到 16(Melanie Plageman) § §

    这更准确地反映了现代硬件。

E.1.3.1.4. 监控 #
  • 增加服务器变量 log_connections 的日志记录粒度(Melanie Plageman) §

    此服务器变量以前仅为布尔值,现在仍支持。

  • 添加 log_connections 选项以报告连接阶段的持续时间(Melanie Plageman) §

  • 添加 log_line_prefix 转义 %L 以输出客户端IP地址(Greg Sabino Mullane) §

  • 添加服务器变量 log_lock_failures 以记录锁获取失败(Yuki Seino, Fujii Masao) § §

    具体来说,它报告 SELECT ... NOWAIT 锁失败。

  • 修改 pg_stat_all_tables 及其变体以报告在 VACUUMANALYZE 及其自动变体中花费的时间(Sami Imseih) §

    新列是 total_vacuum_timetotal_autovacuum_timetotal_analyze_timetotal_autoanalyze_time

  • VACUUMANALYZE 添加延迟时间报告(Bertrand Drouvot, Nathan Bossart) § §

    此信息出现在服务器日志、系统视图 pg_stat_progress_vacuumpg_stat_progress_analyze 以及 VERBOSE 模式下的 VACUUMANALYZE 的输出中;必须使用服务器变量 track_cost_delay_timing 启用跟踪。

  • 添加WAL, CPU以及平均读取统计信息输出到 ANALYZE VERBOSE(Anthonin Bonnefoy) § §

  • 添加完整WAL缓冲区计数到 VACUUM/ANALYZE (VERBOSE) 和 autovacuum 日志输出(Bertrand Drouvot) §

  • 添加每后端 I/O 统计信息报告(Bertrand Drouvot) § §

    统计信息通过 pg_stat_get_backend_io() 访问。每后端 I/O 统计信息可以通过 pg_stat_reset_backend_stats() 清除。

  • 添加 pg_stat_io 列以字节报告 I/O 活动(Nazir Bilal Yavuz) §

    新列是 read_byteswrite_bytesextend_bytesop_bytes 列(始终等于 BLCKSZ)已移除。

  • 添加WALpg_stat_io 的 I/O 活动行(Nazir Bilal Yavuz, Bertrand Drouvot, Michael Paquier) § § §

    这包括WAL接收器活动以及此类写入的等待事件。

  • 更改服务器变量 track_wal_io_timing 以控制跟踪WALpg_stat_io 中的时间而不是 pg_stat_wal(Bertrand Drouvot) §

  • pg_stat_wal 中移除读/同步列(Bertrand Drouvot) § §

    这会移除列 wal_writewal_syncwal_write_timewal_sync_time

  • 添加函数 pg_stat_get_backend_wal() 以返回每后端WAL统计信息(Bertrand Drouvot) §

    每后端WAL统计信息可以通过 pg_stat_reset_backend_stats() 清除。

  • 添加函数 pg_ls_summariesdir() 以专门列出 PGDATA/pg_wal/summaries 的内容(Yushi Ogiwara) §

  • 添加列 pg_stat_checkpointer.num_done 以报告已完成的检查点数量(Anton A. Melnikov) §

    num_timednum_requested 同时计算已完成和已跳过的检查点。

  • 添加列 pg_stat_checkpointer.slru_written 以报告SLRU写入的缓冲区(Nitin Jadhav) §

    此外,修改检查点服务器日志消息以报告单独的共享缓冲区和SLRU缓冲区值。

  • 添加列到 pg_stat_database 以报告并行工作者活动(Benoit Lobréau) §

    新列是 parallel_workers_to_launchparallel_workers_launched

  • 让常量列表的 查询 ID 计算只考虑第一个和最后一个常量(Dmitry Dolgov, Sami Imseih) § § §

    洗牌由 pg_stat_statements 使用。

  • 调整查询 ID 计算以将使用相同关系名称的查询组合在一起(Michael Paquier, Sami Imseih) §

    即使不同模式中的表具有不同的列名,这也是成立的。

  • 添加列 pg_backend_memory_contexts.type 以报告内存上下文的类型(David Rowley) §

  • 添加列 pg_backend_memory_contexts.path 以显示内存上下文父级(Melih Mutlu) §

E.1.3.1.5. 权限 #
E.1.3.1.6. 服务器配置 #
  • 添加对 OAuth 认证方法的支持(Jacob Champion, Daniel Gustafsson, Thomas Munro) §

    这向 pg_hba.conf 添加了 oauth 认证方法、libpq OAuth 选项、一个用于加载令牌验证库的服务器变量 oauth_validator_libraries,以及一个 --with-libcurl 配置标志以添加所需的编译时库。

  • 添加服务器变量 ssl_tls13_ciphers 以允许指定多个以冒号分隔的 TLSv1.3 密码套件(Erica Zhang, Daniel Gustafsson) §

  • 将服务器变量 ssl_groups 的默认值更改为包含椭圆曲线 X25519(Daniel Gustafsson, Jacob Champion) §

  • 将服务器变量 ssl_ecdh_curve 重命名为 ssl_groups,并允许指定多个以冒号分隔的ECDH曲线(Erica Zhang, Daniel Gustafsson) §

    以前的名称仍然有效。

  • 取消请求键 设为 256 位(Heikki Linnakangas, Jelte Fennema-Nio) § §

    这只有在服务器和客户端支持本版本中引入的线协议版本3.2时才可能实现。

  • 添加服务器变量 autovacuum_worker_slots 以指定后台工作者的最大数量(Nathan Bossart) §

    设置此变量后,autovacuum_max_workers 可以在运行时调整到此最大值,而无需重新启动服务器。

  • 允许指定触发 自动清理 的死元组的固定数量(Nathan Bossart, Frédéric Yhuel) §

    服务器变量是 autovacuum_vacuum_max_threshold。百分比仍用于触发。

  • 更改服务器变量 max_files_per_process 以仅限制后端打开的文件(Andres Freund) §

    以前,postmaster 打开的文件也计入此限制。

  • 添加服务器变量 num_os_semaphores 以报告所需信号量的数量(Nathan Bossart) §

    这对于操作系统配置很有用。

  • 添加服务器变量 extension_control_path 以指定扩展控制文件的位置(Peter Eisentraut, Matheus Alcantara) § §

E.1.3.1.7. 流复制和恢复 #
E.1.3.1.8. 逻辑复制 #
  • 允许 生成列 的值进行逻辑复制(Shubham Khanna, Vignesh C, Zhijie Hou, Shlok Kyal, Peter Smith) § § § §

    如果发布指定了列列表,则发布所有指定的列(生成的和非生成的)。如果没有指定的列列表,则发布选项 publish_generated_columns 控制是否发布生成的列。以前生成的列不进行复制,订阅者必须在可能的情况下计算值;这对于缺少此类功能的非 PostgreSQL 订阅者特别有用。

  • CREATE SUBSCRIPTION 流式选项的默认值从 off 更改为 parallel(Vignesh C) §

  • 允许 ALTER SUBSCRIPTION 更改复制槽的两阶段提交行为(Hayato Kuroda, Ajin Cherian, Amit Kapila, Zhijie Hou) § §

  • 在应用逻辑复制更改时记录 冲突(Zhijie Hou, Nisha Moond) § § § § §

    同时在 pg_stat_subscription_stats 的新列中报告。

E.1.3.2. 实用命令 #

  • 允许 生成列 是虚拟的,并使它们成为默认值(Peter Eisentraut, Jian He, Richard Guo, Dean Rasheed) § § §

    虚拟生成列在读取时生成其值,而不是在写入时生成。写入行为仍然可以通过 STORED 选项指定。

  • DML查询中向 RETURNING 添加 OLD/NEW 支持(Dean Rasheed) §

    以前,RETURNING 只返回 INSERTUPDATE 的新值,以及 DELETE 的旧值;MERGE 将返回为执行的内部查询的适当值。此新语法允许 INSERT/UPDATE/DELETE/MERGERETURNING 列表通过使用特殊别名 oldnew 显式返回旧值和新值。这些别名可以重命名以避免标识符冲突。

  • 允许像现有本地表一样创建外部表(Zhang Mingli) §

    语法是 CREATE FOREIGN TABLE ... LIKE

  • 允许 LIKE非确定性排序规则一起使用(Peter Eisentraut) §

  • 允许文本位置搜索函数与非确定性排序规则一起使用(Peter Eisentraut) §

    这些以前会生成错误。

  • 添加内置排序规则提供程序 PG_UNICODE_FAST(Jeff Davis) §

    此区域设置支持大小写映射,但按代码点顺序排序,而非自然语言顺序。

  • 允许 VACUUMANALYZE 处理分区表而不处理其子表(Michael Harris) §

    这通过新的 ONLY 选项启用。这很有用,因为自动清理不处理分区表,只处理其子表。

  • 添加函数以修改每关系和每列优化器统计信息(Corey Huinker) § § §

    这些函数是 pg_restore_relation_stats()pg_restore_attribute_stats()pg_clear_relation_stats()pg_clear_attribute_stats()

  • 添加服务器变量 file_copy_method 以控制文件复制方法(Nazir Bilal Yavuz) §

    这控制 CREATE DATABASE ... STRATEGY=FILE_COPYALTER DATABASE ... SET TABLESPACE 是使用文件复制还是克隆。

E.1.3.2.1. 约束 #
  • 允许指定不重叠的 PRIMARY KEYUNIQUE外键 约束(Paul A. Jungwirth) § §

    这通过 WITHOUT OVERLAPS 用于 PRIMARY KEYUNIQUE,并通过 PERIOD 用于外键,所有这些都应用于最后一个指定的列。

  • 允许将 CHECK外键 约束指定为 NOT ENFORCED(Amul Sul) § §

    这还添加了列 pg_constraint.conenforced

  • 要求 主键/外键 关系使用确定性排序规则或相同的非确定性排序规则(Peter Eisentraut) §

    如果这些要求不满足,pg_dump 的恢复(pg_upgrade 也使用)将失败;必须对模式进行更改才能使这些升级方法成功。

  • 将列 NOT NULL 规范存储在 pg_constraint 中(Álvaro Herrera, Bernd Helmle) § §

    这允许为 NOT NULL 约束指定名称。这还向外表添加了 NOT NULL 约束,并向本地表添加了 NOT NULL 继承控制。

  • 允许 ALTER TABLE 设置 NOT NULL 约束的 NOT VALID 属性(Rushabh Lathia, Jian He) §

  • 允许修改 NOT NULL 约束的可继承性(Suraj Kharage, Álvaro Herrera) § §

    语法是 ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT

  • 允许分区表上的 NOT VALID 外键约束(Amul Sul) §

  • 允许在分区表上 丢弃约束(Álvaro Herrera) §

    这以前被错误地禁止了。

E.1.3.2.2. COPY #
  • 添加 REJECT_LIMIT 以控制 COPY FROM 可以忽略的无效行数(Atsushi Torikoshi) §

    这在 ON_ERROR = 'ignore' 时可用。

  • 允许 COPY TO 从已填充的物化视图复制行(Jian He) §

  • 添加 COPY LOG_VERBOSITY 级别 silent 以抑制被忽略行的日志输出(Atsushi Torikoshi) §

    on_error = 'ignore' 时,此新级别会抑制被丢弃的输入行的输出。

  • 禁止在外部表上 COPY FREEZE(Nathan Bossart) §

    以前,COPY 可以工作,但 FREEZE 会被忽略,所以禁止此命令。

E.1.3.2.3. EXPLAIN #
  • 自动将 BUFFERS 输出包含在 EXPLAIN ANALYZE 中(Guillaume Lelarge, David Rowley) §

  • 添加完整WAL缓冲区计数到 EXPLAIN (WAL) 输出(Bertrand Drouvot) §

  • EXPLAIN ANALYZE 中,报告每个索引扫描节点使用的索引查找次数(Peter Geoghegan) §

  • 修改 EXPLAIN 以输出小数行计数(Ibrar Ahmed, Ilia Evdokimov, Robert Haas) § §

  • 将内存和磁盘使用详细信息添加到 MaterialWindow Aggregate 和通用表表达式节点到 EXPLAIN 输出(David Rowley, Tatsuo Ishii) § § § §

  • 将窗口函数参数的详细信息添加到 EXPLAIN 输出(Tom Lane) §

  • Parallel Bitmap Heap Scan 工作者缓存统计信息添加到 EXPLAIN ANALYZE(David Geier, Heikki Linnakangas, Donghang Lin, Alena Rybakina, David Rowley) §

  • EXPLAIN ANALYZE 输出中指示已禁用节点(Robert Haas, David Rowley, Laurenz Albe) § § §

E.1.3.3. 数据类型 #

  • 改进 Unicode 全大小写映射和转换(Jeff Davis) § §

    这增加了进行条件和标题大小写映射的能力,以及将单个字符大小写映射到多个字符的能力。

  • 允许将 jsonb null 值转换为标量类型为 NULL(Tom Lane) §

    以前这样的转换会产生错误。

  • json{b}_strip_nulls 添加可选参数,以允许删除空数组元素(Florents Tselai) §

  • 添加函数 array_sort(),它对数组的第一维进行排序(Junwang Zhao, Jian He) §

  • 添加函数 array_reverse(),它反转数组的第一维(Aleksander Alekseev) §

  • 添加函数 reverse() 以反转 bytea 字节(Aleksander Alekseev) §

  • 允许在整数类型和 bytea 之间进行转换(Aleksander Alekseev) §

    整数值存储为 bytea 二进制补码值。

  • 更新 Unicode 数据至 Unicode 16.0.0(Peter Eisentraut) §

  • 添加爱沙尼亚语的全文搜索 词干提取(Tom Lane) §

  • 改进 XML 错误代码以更接近SQL标准(Tom Lane) §

    这些错误通过 SQLSTATE 报告。

E.1.3.4. 函数 #

E.1.3.5. libpq #

  • 添加函数 PQfullProtocolVersion() 以报告完整的(包括次要版本)协议版本号(Jacob Champion, Jelte Fennema-Nio) §

  • 添加 libpq 连接 参数环境变量 以指定连接的最小和最大可接受协议版本(Jelte Fennema-Nio) § §

  • 向客户端报告 search_path 更改(Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra) § §

  • 添加 PQtrace() 输出,用于所有消息类型,包括认证(Jelte Fennema-Nio) § § § § §

  • 添加 libpq 连接参数 sslkeylogfile,该参数会转储SSL关键材料(Abhishek Chanda, Daniel Gustafsson) §

    这对于调试很有用。

  • 修改一些 libpq 函数签名以使用 int64_t(Thomas Munro) §

    这些以前使用 pg_int64,现已弃用。

E.1.3.6. psql #

  • 允许 psql 解析、绑定和关闭命名预处理语句(Anthonin Bonnefoy, Michael Paquier) § §

    这通过新命令 \parse\bind_named\close_prepared 完成。

  • 添加 psql 反斜杠命令以允许发出管道查询(Anthonin Bonnefoy) § § §

    新命令是 \startpipeline\syncpipeline\sendpipeline\endpipeline\flushrequest\flush\getresults

  • 允许将管道状态添加到 psql 提示符并添加相关状态变量(Anthonin Bonnefoy) §

    新的提示符字符是 %P,新的 psql 变量是 PIPELINE_SYNC_COUNTPIPELINE_COMMAND_COUNTPIPELINE_RESULT_COUNT

  • 允许将连接服务名称添加到 psql 提示符或通过 psql 变量访问它(Michael Banck) §

  • 添加 psql 选项,在所有列表命令上使用扩展模式(Dean Rasheed) §

    添加反斜杠后缀 x 启用此功能。

  • 更改 psql\conninfo 以使用表格格式并包含更多信息(Álvaro Herrera, Maiquel Grassi, Hunaid Sohail) §

  • 将函数的防泄漏指示器添加到 psql\df+\do+\dAo+\dC+ 输出(Yugo Nagata) §

  • \dP+ 中为分区关系添加访问方法详细信息(Justin Pryzby) §

  • default_version 添加到 psql \dx 扩展输出(Magnus Hagander) §

  • 添加 psql 变量 WATCH_INTERVAL 以设置默认的 \watch 等待时间(Daniel Gustafsson) §

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

  • 更改 initdb 默认启用校验和(Greg Sabino Mullane) § §

    新的 initdb 选项 --no-data-checksums 禁用校验和。

  • 添加 initdb 选项 --no-sync-data-files 以避免同步堆/索引文件(Nathan Bossart) §

    initdb 选项 --no-sync 仍然可用,以避免同步任何文件。

  • 添加 vacuumdb 选项 --missing-stats-only 以仅计算缺失的优化器统计信息(Corey Huinker, Nathan Bossart) § §

    此选项只能由超级用户运行,并且只能与选项 --analyze-only--analyze-in-stages 一起使用。

  • 添加 pg_combinebackup 选项 -k/--link 以启用硬链接(Israel Barth Rubio, Robert Haas) §

    只有某些文件可以硬链接。如果备份将独立使用,则不应使用此功能。

  • 允许 pg_verifybackup 验证 tar 格式备份(Amul Sul) §

  • 如果 pg_rewind--source-server 指定了数据库名称,则在 --write-recovery-conf 输出中使用它(Masahiko Sawada) §

  • 添加 pg_resetwal 选项 --char-signedness 以更改默认的 char 有符号性(Masahiko Sawada) §

  • 添加 pg_dump 选项 --statistics(Jeff Davis) § §

  • 添加 pg_dumppg_dumpall 选项 --sequence-data 以转储通常会被排除的序列数据(Nathan Bossart) § §

  • 添加 pg_dumppg_dumpallpg_restore 选项 --statistics-only--no-statistics--no-data--no-schema(Corey Huinker, Jeff Davis) §

  • 添加选项 --no-policies 以禁用 pg_dumppg_dumpallpg_restore 中的行级安全策略处理(Nikolay Samokhvalov) §

    这对于迁移到具有不同策略的系统很有用。

E.1.3.7.2. pg_upgrade #
  • 允许 pg_upgrade 保留优化器统计信息(Corey Huinker, Jeff Davis, Nathan Bossart) § § § §

    不保留扩展统计信息。同时添加 pg_upgrade 选项 --no-statistics 以禁用统计信息保留。

  • 允许 pg_upgrade 并行处理数据库检查(Nathan Bossart) § § § § § § § § § §

    这由现有 --jobs 选项控制。

  • 添加 pg_upgrade 选项 --swap 以交换目录而不是复制、克隆或链接文件(Nathan Bossart) §

    此模式可能是最快的。

  • 添加 pg_upgrade 选项 --set-char-signedness 以设置新集群的默认 char 符号性(Masahiko Sawada) § §

    这是为了处理 PostgreSQL 18 之前集群的默认CPU符号性与新集群不匹配的情况。

E.1.3.7.3. 逻辑复制应用程序 #
  • 添加 pg_createsubscriber 选项 --all 以创建所有数据库的逻辑副本(Shubham Khanna) §

  • 添加 pg_createsubscriber 选项 --clean 以删除发布(Shubham Khanna) § §

  • 添加 pg_createsubscriber 选项 --enable-two-phase 以启用预备事务(Shubham Khanna) §

  • 添加 pg_recvlogical 选项 --enable-failover 以指定故障转移槽(Hayato Kuroda) §

    还添加选项 --enable-two-phase 作为 --two-phase 的同义词,并弃用后者。

  • 允许 pg_recvlogical --drop-slot 在没有 --dbname 的情况下工作(Hayato Kuroda) §

E.1.3.8. 源代码 #

  • 分离 注入点 的加载和运行(Michael Paquier, Heikki Linnakangas) § §

    现在可以通过 INJECTION_POINT_LOAD() 创建注入点但不运行,并且可以通过 INJECTION_POINT_CACHED() 运行这些注入点。

  • 支持注入点中的运行时参数(Michael Paquier) §

  • 允许使用 IS_INJECTION_POINT_ATTACHED() 的内联注入点测试代码(Heikki Linnakangas) §

  • 使用SIMD(单指令多数据)改进处理长 JSON 字符串的性能(David Rowley) §

  • 使用 x86AVX-512 指令加速 CRC32C 计算(Raghuveer Devulapalli, Paul Amonson) §

  • 添加ARMNeon 和SVE CPU用于 popcount(整数位计数)的内在函数(Chiranmoy Bhattacharya, Devanga Susmitha, Rama Malladi) § §

  • 提高数值乘法和除法的速度(Joel Jacobson, Dean Rasheed) § § § §

  • 添加配置选项--with-libnuma以启用NUMA(Jakub Wartak, Bertrand Drouvot) § § §

    函数pg_numa_available()报告NUMA,以及报告共享内存跨节点分布的系统视图pg_shmem_allocations_numapg_buffercache_numaNUMA节点。

  • TOAST表添加到pg_index,以允许创建超大型表达式索引(Nathan Bossart) §

  • 移除列pg_attribute.attcacheoff(David Rowley) §

  • 添加列pg_class.relallfrozen(Melanie Plageman) §

  • amgettreeheightamconsistentequalityamconsistentordering添加到索引访问方法API(Mark Dilger) § §

  • 添加GiST支持函数stratnum()(Paul A. Jungwirth) §

  • 记录charpg_controldata中的默认有符号性(Masahiko Sawada) §CPU的默认有符号性。

  • PL/Python中添加对Python“Limited”的支持(Peter Eisentraut) § §API“的支持。

    这有助于防止由于Python 3.x 版本不匹配引起的问题。

  • 将最低支持的Python版本更改为3.6.8(Jacob Champion) §

  • 移除对早于1.1.1版本的OpenSSL的支持(Daniel Gustafsson) § §

  • 如果启用LLVM,则要求版本14或更高(Thomas Munro) §

  • 添加宏PG_MODULE_MAGIC_EXT以允许扩展报告其名称和版本(Andrei Lepikhov) §

    此信息可以通过新函数pg_get_loaded_modules()访问。

  • 文档指出SPI_connect()/SPI_connect_ext()总是返回成功(SPI_OK_CONNECT)(Stepan Neretin) §

    错误总是通过ereport()报告。

  • 添加关于APIABI兼容性的文档部分(David Wheeler, Peter Eisentraut) §

  • 移除WindowsMeson构建的实验性标记(Aleksander Alekseev) §

  • 移除配置选项--disable-spinlocks--disable-atomics(Thomas Munro) § §

    现在需要32位原子操作。

  • 移除对HPPA/PA-RISC架构的支持(Tom Lane) §

E.1.3.9. 附加模块 #

  • 添加扩展pg_logicalinspect以检查逻辑快照(Bertrand Drouvot) §

  • 添加扩展pg_overexplain,它向EXPLAIN输出添加调试细节(Robert Haas) §

  • postgres_fdw_get_connections()添加输出列(Hayato Kuroda, Sagar Dilip Shedge) § § § §

    新的输出列used_in_xact指示外部数据包装器是否正在被当前事务使用,closed指示它是否已关闭,user_name指示用户名,remote_backend_pid指示远程后端进程标识符。

  • 允许将客户端的SCRAM认证传递给postgres_fdw服务器(Matheus Alcantara, Peter Eisentraut) §

    这避免了在数据库中存储postgres_fdw认证信息,并通过postgres_fdw use_scram_passthrough连接选项启用。libpq使用新的连接参数scram_client_keyscram_server_key

  • 允许SCRAM将客户端的认证传递给dblink服务器(Matheus Alcantara) §

  • file_fdw添加on_errorlog_verbosity选项(Atsushi Torikoshi) §

    这些控制file_fdw如何处理和报告无效文件行。

  • 添加reject_limit以控制file_fdw可以忽略的无效行数(Atsushi Torikoshi) §

    这在ON_ERROR = 'ignore'时激活。

  • passwordcheck添加可配置变量min_password_length(Emanuele Musella, Maurizio Boriani) §

    这控制最小密码长度。

  • pgbench在每脚本报告中报告失败、重试或跳过的事务数(Yugo Nagata) §

  • 添加isn服务器变量weak以控制无效校验位接受(Viktor Holmberg) §

    这以前仅由函数isn_weak()控制。

  • 允许对值进行排序以加快btree_gist索引的构建(Bernd Helmle, Andrey Borodin) §

  • 添加amcheck检查函数gin_index_check()以验证GIN索引(Grigory Kryachko, Heikki Linnakangas, Andrey Borodin) §

  • 添加函数pg_buffercache_evict_relation()pg_buffercache_evict_all()以逐出未固定的共享缓冲区(Nazir Bilal Yavuz) §

    现有函数pg_buffercache_evict()现在返回缓冲区刷新状态。

  • 允许扩展安装自定义的EXPLAIN选项(Robert Haas, Sami Imseih) § § §

  • 允许扩展使用服务器的累计统计信息API(Michael Paquier) § §

E.1.3.9.1. pg_stat_statements #
  • 允许CREATE TABLE ASDECLARE的查询被pg_stat_statements跟踪(Anthonin Bonnefoy) §

    它们现在也被分配了查询ID。

  • 允许pg_stat_statementsSET值的参数化(Greg Sabino Mullane, Michael Paquier) §

    这减少了由于具有不同常量的SET语句引起的数据膨胀。

  • 添加pg_stat_statements列以报告并行活动(Guillaume Lelarge) §

    新列是 parallel_workers_to_launchparallel_workers_launched

  • 添加pg_stat_statements.wal_buffers_full以报告满WAL缓冲区(Bertrand Drouvot) §

E.1.3.9.2. pgcrypto #
  • 添加pgcrypto算法sha256cryptsha512crypt(Bernd Helmle) §

  • pgcrypto加密和解密添加CFB模式(Umar Hayat) §

  • 添加函数fips_mode()以报告服务器的FIPS模式(Daniel Gustafsson) §

  • 添加pgcrypto服务器变量builtin_crypto_enabled以允许禁用内置非FIPS模式加密函数(Daniel Gustafsson, Joe Conway) §

    这对于保证FIPS模式行为很有用。

E.1.4. 致谢 #

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

Abhishek Chanda
Adam Guo
Adam Rauch
Aidar Imamov
Ajin Cherian
Alastair Turner
Alec Cozens
Aleksander Alekseev
Alena Rybakina
Alex Friedman
Alex Richman
Alexander Alehin
Alexander Borisov
Alexander Korotkov
Alexander Kozhemyakin
Alexander Kukushkin
Alexander Kuzmenkov
Alexander Kuznetsov
Alexander Lakhin
Alexander Pyhalov
Alexandra Wang
Alexey Dvoichenkov
Alexey Makhmutov
Alexey Shishkin
Ali Akbar
Álvaro Herrera
Álvaro Mongil
Amit Kapila
Amit Langote
Amul Sul
Andreas Karlsson
Andreas Scherbaum
Andreas Ulbrich
Andrei Lepikhov
Andres Freund
Andrew
Andrew Bille
Andrew Dunstan
Andrew Jackson
Andrew Kane
Andrew Watkins
Andrey Borodin
Andrey Chudnovsky
Andrey Rachitskiy
Andrey Rudometov
Andy Alsup
Andy Fan
Anthonin Bonnefoy
Anthony Hsu
Anthony Leung
Anton Melnikov
Anton Voloshin
Antonin Houska
Antti Lampinen
Arseniy Mukhin
Artur Zakirov
Arun Thirupathi
Ashutosh Bapat
Asphator
Atsushi Torikoshi
Avi Weinberg
Aya Iwata
Ayush Tiwari
Ayush Vatsa
Bastien Roucariès
Ben Peachey Higdon
Benoit Lobréau
Bernd Helmle
Bernd Reiß
Bernhard Wiedemann
Bertrand Drouvot
Bertrand Mamasam
Bharath Rupireddy
Bogdan Grigorenko
Boyu Yang
Braulio Fdo Gonzalez
Bruce Momjian
Bykov Ivan
Cameron Vogt
Cary Huang
Cédric Villemain
Cees van Zeeland
ChangAo Chen
Chao Li
Chapman Flack
Charles Samborski
Chengwen Wu
Chengxi Sun
Chiranmoy Bhattacharya
Chris Gooch
Christian Charukiewicz
Christoph Berg
Christophe Courtois
Christopher Inokuchi
Clemens Ruck
Corey Huinker
Craig Milhiser
Crisp Lee
Dagfinn Ilmari Mannsåker
Daniel Elishakov
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Daniele Varrazzo
Daniil Davydov
Daria Shanina
Dave Cramer
Dave Page
David Benjamin
David Christensen
David Fiedler
David G. Johnston
David Geier
David Rowley
David Steele
David Wheeler
David Zhang
Davinder Singh
Dean Rasheed
Devanga Susmitha
Devrim Gündüz
Dian Fay
Dilip Kumar
Dimitrios Apostolou
Dipesh Dhameliya
Dmitrii Bondar
Dmitry Dolgov
Dmitry Koval
Dmitry Kovalenko
Dmitry Yurichev
Dominique Devienne
Donghang Lin
Dorjpalam Batbaatar
Drew Callahan
Duncan Sands
Dwayne Towell
Dzmitry Jachnik
Egor Chindyaskin
Egor Rogov
Emanuel Ionescu
Emanuele Musella
Emre Hasegeli
Eric Cyr
Erica Zhang
Erik Nordström
Erik Rijkers
Erik Wienhold
Erki Eessaar
Ethan Mertz
Etienne LAFARGE
Etsuro Fujita
Euler Taveira
Evan Si
Evgeniy Gorbanev
Fabio R. Sluzala
Fabrízio de Royes Mello
Feike Steenbergen
Feliphe Pozzer
Felix
Fire Emerald
Florents Tselai
Francesco Degrassi
Frank Streitzig
Frédéric Yhuel
Fredrik Widlert
Gabriele Bartolini
Gavin Panella
Geoff Winkless
George MacKerron
Gilles Darold
Grant Gryczan
Greg Burd
Greg Sabino Mullane
Greg Stark
Grigory Kryachko
Guillaume Lelarge
Gunnar Morling
Gunnar Wagner
Gurjeet Singh
Haifang Wang
Hajime Matsunaga
Hamid Akhtar
Hannu Krosing
Hari Krishna Sunder
Haruka Takatsuka
Hayato Kuroda
Heikki Linnakangas
Hironobu Suzuki
Holger Jakobs
Hubert Lubaczewski
Hugo Dubois
Hugo Zhang
Hunaid Sohail
Hywel Carver
Ian Barwick
Ibrar Ahmed
Igor Gnatyuk
Igor Korot
Ilia Evdokimov
Ilya Gladyshev
Ilyasov Ian
Imran Zaheer
Isaac Morland
Israel Barth Rubio
Ivan Kush
Jacob Brazeal
Jacob Champion
Jaime Casanova
Jakob Egger
Jakub Wartak
James Coleman
James Hunter
Jan Behrens
Japin Li
Jason Smith
Jayesh Dehankar
Jeevan Chalke
Jeff Davis
Jehan-Guillaume de Rorthais
Jelte Fennema-Nio
Jian He
Jianghua Yang
Jiao Shuntian
Jim Jones
Jim Nasby
Jingtang Zhang
Jingzhou Fu
Joe Conway
Joel Jacobson
John Hutchins
John Naylor
Jonathan Katz
Jorge Solórzano
José Villanova
Josef Šimánek
Joseph Koshakow
Julien Rouhaud
Junwang Zhao
Justin Pryzby
Kaido Vaikla
Kaimeh
Karina Litskevich
Karthik S
Kartyshov Ivan
Kashif Zeeshan
Keisuke Kuroda
Kevin Hale Boyes
Kevin K Biju
Kirill Reshke
Kirill Zdornyy
Koen De Groote
Koichi Suzuki
Koki Nakamura
Konstantin Knizhnik
Kouhei Sutou
Kuntal Ghosh
Kyotaro Horiguchi
Lakshmi Narayana Velayudam
Lars Kanis
Laurence Parry
Laurenz Albe
Lele Gaifax
Li Yong
Lilian Ontowhee
Lingbin Meng
Luboslav Špilák
Luca Vallisa
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Mahendra Singh Thalor
Mahendrakar Srinivasarao
Maiquel Grassi
Maksim Korotkov
Maksim Melnikov
Man Zeng
Marat Buharov
Marc Balmer
Marco Nenciarini
Marcos Pegoraro
Marina Polyakova
Mark Callaghan
Mark Dilger
Marlene Brandstaetter
Marlene Reiterer
Martin Rakhmanov
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Mason Mackaman
Mat Arye
Matheus Alcantara
Mats Kindahl
Matthew Gabeler-Lee
Matthew Kim
Matthew Sterrett
Matthew Woodcraft
Matthias van de Meent
Matthieu Denais
Maurizio Boriani
Max Johnson
Max Madden
Maxim Boguk
Maxim Orlov
Maximilian Chrzan
Melanie Plageman
Melih Mutlu
Mert Alev
Michael Banck
Michael Bondarenko
Michael Christofides
Michael Guissine
Michael Harris
Michaël Paquier
Michail Nikolaev
Michal Kleczek
Michel Pelletier
Mikaël Gourlaouen
Mikhail Gribkov
Mikhail Kot
Milosz Chmura
Muralikrishna Bandaru
Murat Efendioglu
Mutaamba Maasha
Naeem Akhter
Nat Makarevitch
Nathan Bossart
Navneet Kumar
Nazir Bilal Yavuz
Neil Conway
Niccolò Fei
Nick Davies
Nicolas Maus
Niek Brasa
Nikhil Raj
Nikita
Nikita Kalinin
Nikita Malakhov
Nikolay Samokhvalov
Nikolay Shaplov
Nisha Moond
Nitin Jadhav
Nitin Motiani
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Ole Peder Brandtzæg
Oleg Sibiryakov
Oleg Tselebrovskiy
Olleg Samoylov
Onder Kalaci
Ondrej Navratil
Patrick Stählin
Paul Amonson
Paul Jungwirth
Paul Ramsey
Pavel Borisov
Pavel Luzanov
Pavel Nekrasov
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Peter Mittere
Peter Smith
Phil Eaton
Philipp Salvisberg
Philippe Beaudoin
Pierre Giraud
Pixian Shi
Polina Bungina
Przemyslaw Sztoch
Quynh Tran
Rafia Sabih
Raghuveer Devulapalli
Rahila Syed
Rama Malladi
Ran Benita
Ranier Vilela
Renan Alves Fonseca
Richard Guo
Richard Neill
Rintaro Ikeda
Robert Haas
Robert Treat
Robins Tharakan
Roman Zharkov
Ronald Cruz
Ronan Dunklau
Rui Zhao
Rushabh Lathia
Rustam Allakov
Ryo Kanbayashi
Ryohei Takahashi
RyotaK
Sagar Dilip Shedge
Salvatore Dipietro
Sam Gabrielsson
Sam James
Sameer Kumar
Sami Imseih
Samuel Thibault
Satyanarayana Narlapuram
Sebastian Skalacki
Senglee Choi
Sergei Kornilov
Sergey Belyashov
Sergey Dudoladov
Sergey Prokhorenko
Sergey Sargsyan
Sergey Soloviev
Sergey Tatarintsev
Shaik Mohammad Mujeeb
Shawn McCoy
Shenhao Wang
Shihao Zhong
Shinya Kato
Shlok Kyal
Shubham Khanna
Shveta Malik
Simon Riggs
Smolkin Grigory
Sofia Kopikova
Song Hongyu
Song Jinzhou
Soumyadeep Chakraborty
Sravan Kumar
Srinath Reddy
Stan Hu
Stepan Neretin
Stephen Fewer
Stephen Frost
Steve Chavez
Steven Niu
Suraj Kharage
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuo Ishii
Ted Yu
Tels
Tender Wang
Teodor Sigaev
Thom Brown
Thomas Baehler
Thomas Krennwallner
Thomas Munro
Tim Wood
Timur Magomedov
Tobias Wendorff
Todd Cook
Tofig Aliev
Tom Lane
Tomas Vondra
Tomasz Rybak
Tomasz Szypowski
Torsten Foertsch
Toshi Harada
Tristan Partin
Triveni N
Umar Hayat
Vallimaharajan G
Vasya Boytsov
Victor Yegorov
Vignesh C
Viktor Holmberg
Vinícius Abrahão
Vinod Sridharan
Virender Singla
Vitaly Davydov
Vladlen Popolitov
Vladyslav Nebozhyn
Walid Ibrahim
Webbo Han
Wenhui Qiu
Will Mortensen
Will Storey
Wolfgang Walther
Xin Zhang
Xing Guo
Xuneng Zhou
Yan Chengpen
Yang Lei
Yaroslav Saburov
Yaroslav Syrytsia
Yasir Hussain
Yasuo Honda
Yogesh Sharma
Yonghao Lee
Yoran Heling
Yu Liang
Yugo Nagata
Yuhang Qiu
Yuki Seino
Yura Sokolov
Yurii Rashkovskii
Yushi Ogiwara
Yusuke Sugie
Yuta Katsuragi
Yuto Sasaki
Yuuki Fujii
Yuya Watari
Zane Duffield
Zeyuan Hu
Zhang Mingli
Zhihong Yu
Zhijie Hou
Zsolt Parragi

提交更正

如果您发现文档中有任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表单报告文档问题。