E.6. 发布版本 18 #
发布日期: 2025-09-25
E.6.1. 概述 #
PostgreSQL 18 包含许多新特性和增强功能,包括:
异步 I/O(AIO)子系统,可以提高顺序扫描、位图堆扫描、清理和其他操作的性能。
pg_upgrade 现在保留优化器统计信息。
支持“跳过扫描”,允许在更多情况下使用多列 B-树索引。
虚拟生成列,它们在读取期间计算其值。这现在是生成列的默认设置。
支持 OAuth 认证。
在 INSERT、UPDATE、DELETE 和 MERGE 命令的
RETURNING子句中支持OLD和NEW。为 PRIMARY KEY、UNIQUE 和 FOREIGN KEY 约束提供时间约束或范围约束。
下面几节将更详细地解释上述项目以及 PostgreSQL 18 的其他新特性。
E.6.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 密码的支持将在未来的主要版本中移除。CREATE ROLE 和 ALTER ROLE 现在在设置 MD5 密码时会发出弃用警告。可以通过将 md5_password_warnings 参数设置为
off来禁用这些警告。更改 VACUUM 和 ANALYZE 以处理父表的继承子表(Michael Harris)§
可以使用新的
ONLY选项执行以前的行为。防止
COPY FROM在读取 CSV 文件时将\.视为文件结束标记(Daniel Vérité, Tom Lane)§ §psql 在从
STDIN读取 CSV 文件时仍会将\.视为文件结束标记。较旧的 psql 客户端连接到 PostgreSQL 18 服务器时,可能会在\copy上遇到问题。此版本还强制要求\.必须单独出现在一行中。禁止不记录 WAL 的分区表(Michael Paquier)§
以前
ALTER TABLE SET [UN]LOGGED不执行任何操作,并且创建不记录 WAL 的分区表也不会导致其子表不记录 WAL。让
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.level和pg_log_backend_memory_contexts()更改为从 1 开始(Melih Mutlu, Atsushi Torikoshi, David Rowley, Fujii Masao)§ § §这些以前是从零开始的。
更改全文检索,使其使用数据库集簇默认排序规则提供程序来读取配置文件和词典,而不再始终使用 libc(Peter Eisentraut)§
如果数据库集簇默认使用的非 libc 排序规则提供程序(例如 ICU、builtin)对 LC_CTYPE 所处理字符的处理方式与 libc 不同,那么某些全文检索函数以及 pg_trgm 扩展的行为可能会发生变化。使用 pg_upgrade 升级此类数据库集簇时,建议在升级后重新索引所有与全文检索和 pg_trgm 相关的索引。
E.6.3. 变更 #
下面您将找到 PostgreSQL 18 与以前主要版本之间变化的详细说明。
E.6.3.1. 服务器 #
E.6.3.1.1. 优化器 #
自动删除一些不必要的表自连接(Andrey Lepikhov, Alexander Kuzmenkov, Alexander Korotkov, Alena Rybakina)§
可以使用服务器变量 enable_self_join_elimination 禁用此优化。
将一些
IN (VALUES ...)转换为x = ANY ...以获得更好的优化器统计信息(Alena Rybakina, Andrei Lepikhov)§加快
INTERSECT、EXCEPT、窗口聚合和视图列别名的处理速度(Tom Lane, David Rowley)§ § § §允许
SELECT DISTINCT的键在内部重新排序以避免排序(Richard Guo)§可以使用 enable_distinct_reordering 禁用此优化。
忽略功能上依赖于其他列的
GROUP BY列(Zhang Mingli, Jian He, David Rowley)§如果
GROUP BY子句包含唯一索引的所有列以及同一表的其他列,则这些其他列是冗余的,可以从分组中删除。对于非延迟主键,这已经成立。允许将作用于
GROUPING SETS的某些HAVING子句下推到WHERE子句(Richard Guo)§ § § §这允许更早地进行行过滤。此版本还修复了一些以前返回不正确结果的
GROUPING SETS查询。改进
generate_series()使用numeric和timestamp值时的行数估计(David Rowley, Song Jinzhou)§ §允许优化器使用
Right Semi Join计划(Richard Guo)§半连接用于查找是否存在至少一个匹配项。
提高访问多个分区的查询规划效率(Ashutosh Bapat, Yuya Watari, David Rowley)§ §
在更多情况下允许分区连接,并减少其内存使用(Richard Guo, Tom Lane, Ashutosh Bapat)§ §
改进分区查询的代价估算(Nikita Malakhov, Andrei Lepikhov)§
改进禁用优化器功能的处理(Robert Haas)§
E.6.3.1.2. 索引 #
E.6.3.1.3. 一般性能 #
添加异步 I/O 子系统(Andres Freund, Thomas Munro, Nazir Bilal Yavuz, Melanie Plageman)§ § § § § § § § § § §
此功能允许后端排队多个读取请求,从而实现更高效的顺序扫描、位图堆扫描、清理等。这由服务器变量 io_method 启用,并添加了服务器变量 io_combine_limit 和 io_max_combine_limit 来控制它。这还使得不支持
fadvise()的系统也可以将 effective_io_concurrency 和 maintenance_io_concurrency 设为大于零的值。新的系统视图pg_aios显示用于异步 I/O 的文件句柄。改进访问许多关系的查询的锁定性能(Tomas Vondra)§
提高哈希连接和
GROUP BY的性能并减少内存使用(David Rowley, Jeff Davis)§ § § § §这也改进了
EXCEPT使用的 hash 集操作和子计划值的 hash 查找。允许普通清理冻结某些页面,即使它们都是可见的(Melanie Plageman)§ §
这减少了后期全关系冻结的开销。其激进性可以通过服务器变量和每表设置 vacuum_max_eager_freeze_failure_rate 控制。以前,在需要冻结之前,清理从不处理所有可见页面。
添加服务器变量 vacuum_truncate 以控制 VACUUM 期间的文件截断(Nathan Bossart, Gurjeet Singh)§
已经存在一个具有相同名称和行为的存储级别参数。
将服务器变量 effective_io_concurrency 和 maintenance_io_concurrency 的默认值增加到 16(Melanie Plageman)§ §
这更准确地反映了现代硬件。
E.6.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及其变体以报告在 VACUUM、ANALYZE 及其自动执行的变体中花费的时间(Sami Imseih)§新列是
total_vacuum_time、total_autovacuum_time、total_analyze_time和total_autoanalyze_time。向 VACUUM 和 ANALYZE 添加延迟时间报告(Bertrand Drouvot, Nathan Bossart)§ §
此信息出现在服务器日志、系统视图
pg_stat_progress_vacuum和pg_stat_progress_analyze以及 VACUUM 和 ANALYZE 在VERBOSE模式下的输出中;必须使用服务器变量 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_bytes、write_bytes和extend_bytes。op_bytes列(始终等于BLCKSZ)已移除。向
pg_stat_io添加 WAL I/O 活动行(Nazir Bilal Yavuz, Bertrand Drouvot, Michael Paquier)§ § §这包括 WAL 接收器活动以及此类写入的等待事件。
更改服务器变量 track_wal_io_timing 以控制在
pg_stat_io而不是pg_stat_wal中跟踪 WAL 计时(Bertrand Drouvot)§从
pg_stat_wal中移除读/同步列(Bertrand Drouvot)§ §这会移除列
wal_write、wal_sync、wal_write_time和wal_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_timed和num_requested同时统计已完成和已跳过的检查点。添加列
pg_stat_checkpointer.slru_written以报告 SLRU 写入的缓冲区(Nitin Jadhav)§此外,修改检查点服务器日志消息以报告单独的共享缓冲区和 SLRU 缓冲区值。
添加列到
pg_stat_database以报告并行工作者活动(Benoit Lobréau)§新列是
parallel_workers_to_launch和parallel_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.6.3.1.5. 权限 #
添加函数
pg_get_acl()以检索数据库访问控制详细信息(Joel Jacobson)§ §添加函数
has_largeobject_privilege()以检查大型对象权限(Yugo Nagata)§允许 ALTER DEFAULT PRIVILEGES 定义大型对象默认权限(Takatsuka Haruka, Yugo Nagata, Laurenz Albe)§
添加预定义角色
pg_signal_autovacuum_worker(Kirill Reshke)§这允许向自动清理工作者发送信号。
E.6.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 可以在运行时调整到此最大值,而无需重新启动服务器。
允许指定触发 autovacuum 的死元组的固定数量(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.6.3.1.7. 流复制与恢复 #
允许使用服务器变量 idle_replication_slot_timeout 自动使非活动复制槽失效(Nisha Moond, Bharath Rupireddy)§
添加服务器变量 max_active_replication_origins 以控制最大活动复制源(Euler Taveira)§
这以前由 max_replication_slots 控制,但这个新设置允许在需要较少槽位的情况下具有更高的源计数。
允许生成列的值进行逻辑复制(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.6.3.2. 工具命令 #
允许生成列采用虚拟形式,并将虚拟生成列设为默认形式(Peter Eisentraut, Jian He, Richard Guo, Dean Rasheed)§ § §
虚拟生成列在读取时生成其值,而不是在写入时生成。写入行为仍然可以通过
STORED选项指定。为 DML 查询中的
RETURNING添加OLD/NEW支持(Dean Rasheed)§以前,
RETURNING只返回 INSERT 和 UPDATE 的新值,以及 DELETE 的旧值;MERGE 则根据实际执行的内部查询返回相应的值。新语法允许INSERT/UPDATE/DELETE/MERGE的RETURNING列表通过特殊别名old和new显式返回旧值和新值。这些别名可以重命名,以避免标识符冲突。允许像现有本地表一样创建外部表(Zhang Mingli)§
允许文本位置搜索函数与非确定性排序规则一起使用(Peter Eisentraut)§
这些以前会生成错误。
添加内置排序规则提供程序
PG_UNICODE_FAST(Jeff Davis)§此区域设置支持大小写映射,但按代码点顺序排序,而非自然语言顺序。
允许 VACUUM 和 ANALYZE 处理分区表而不处理其子表(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_COPY和ALTER DATABASE ... SET TABLESPACE是使用文件复制还是克隆。
允许指定不重叠的
PRIMARY KEY、UNIQUE和外键约束(Paul A. Jungwirth)§ §这通过
WITHOUT OVERLAPS用于PRIMARY KEY和UNIQUE,并通过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 VALID外键约束(Amul Sul)§允许在分区表上使用
ONLY丢弃约束(Álvaro Herrera)§这以前被错误地禁止了。
添加
REJECT_LIMIT以控制COPY FROM可以忽略的无效行数(Atsushi Torikoshi)§这在
ON_ERROR = 'ignore'时可用。允许
COPY TO从已填充的物化视图复制行(Jian He)§添加
COPYLOG_VERBOSITY级别silent以抑制被忽略行的日志输出(Atsushi Torikoshi)§当
on_error = 'ignore'时,此新级别会抑制与被丢弃输入行有关的消息输出。禁止在外部表上
COPY FREEZE(Nathan Bossart)§以前,
COPY可以工作,但FREEZE会被忽略,所以禁止此命令。
自动将
BUFFERS输出包含在EXPLAIN ANALYZE中(Guillaume Lelarge, David Rowley)§添加完整 WAL 缓冲区计数到
EXPLAIN (WAL)输出(Bertrand Drouvot)§在
EXPLAIN ANALYZE中,报告每个索引扫描节点使用的索引查找次数(Peter Geoghegan)§修改
EXPLAIN以输出小数行计数(Ibrar Ahmed, Ilia Evdokimov, Robert Haas)§ §在
EXPLAIN输出中,为Material、Window Aggregate和通用表表达式节点添加内存和磁盘使用详情(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.6.3.3. 数据类型 #
改进 Unicode 全大小写映射和转换(Jeff Davis)§ §
这增加了进行条件和标题大小写映射的能力,以及将单个字符大小写映射到多个字符的能力。
允许在将
jsonbnull值转换为标量类型时返回NULL(Tom Lane)§以前这样的转换会产生错误。
向
json{b}_strip_nulls添加可选参数,以允许删除数组中的空值元素(Florents Tselai)§添加函数
array_sort(),它对数组的第一维进行排序(Junwang Zhao, Jian He)§添加函数
array_reverse(),它反转数组的第一维(Aleksander Alekseev)§允许在整数类型和
bytea之间进行转换(Aleksander Alekseev)§整数值存储为
bytea二进制补码值。改进
XML错误代码以更接近 SQL 标准(Tom Lane)§这些错误通过
SQLSTATE报告。
E.6.3.4. 函数 #
添加函数
casefold()以允许更复杂的忽略大小写匹配(Jeff Davis)§这允许更准确的比较,即一个字符可以有多个大写或小写等价物,或者大写或小写转换会改变字符的数量。
允许在数组和复合类型上进行
MIN()/MAX()聚合(Aleksander Alekseev, Marat Buharov)§ §改进
EXTRACT(QUARTER ...)对负值的输出(Tom Lane)§向
to_number()添加罗马数字支持(Hunaid Sohail)§这通过
RN模式访问。添加
UUID版本 7 生成函数uuidv7()(Andrey Borodin)§此
UUID值可按时间排序。已添加函数别名uuidv4()以显式生成版本 4 UUID。允许在 PL/pgSQL 中使用
=>语法指定具名游标参数(Pavel Stehule)§我们以前只接受
:=。允许
regexp_match[es]()/regexp_like()/regexp_replace()/regexp_count()/regexp_instr()/regexp_substr()/regexp_split_to_table()/regexp_split_to_array()使用命名参数(Jian He)§
添加函数
PQfullProtocolVersion()以报告完整的(包括次要版本)协议版本号(Jacob Champion, Jelte Fennema-Nio)§向客户端报告 search_path 更改(Alexander Kukushkin, Jelte Fennema-Nio, Tomas Vondra)§ §
添加 libpq 连接参数
sslkeylogfile,该参数会转储 SSL 密钥材料(Abhishek Chanda, Daniel Gustafsson)§这对于调试很有用。
修改一些 libpq 函数签名以使用
int64_t(Thomas Munro)§这些以前使用
pg_int64,现已弃用。
允许 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_COUNT、PIPELINE_COMMAND_COUNT和PIPELINE_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)§添加 psql 变量
WATCH_INTERVAL以设置默认的\watch等待时间(Daniel Gustafsson)§
E.6.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)§
E.6.3.7.1. pg_dump/pg_dumpall/pg_restore #
添加 pg_dump 和 pg_dumpall 选项
--sequence-data以转储通常会被排除的序列数据(Nathan Bossart)§ §添加 pg_dump、pg_dumpall 和 pg_restore 选项
--statistics-only、--no-statistics、--no-data和--no-schema(Corey Huinker, Jeff Davis)§添加选项
--no-policies以禁用 pg_dump、pg_dumpall、pg_restore 中的行级安全策略处理(Nikolay Samokhvalov)§这对于迁移到具有不同策略的系统很有用。
E.6.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.6.3.7.3. 逻辑复制应用程序 #
添加 pg_createsubscriber 选项
--all以创建所有数据库的逻辑副本(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.6.3.8. 源代码 #
分离注入点的加载和运行(Michael Paquier, Heikki Linnakangas)§ §
现在可以通过
INJECTION_POINT_LOAD()创建注入点但不运行,并且可以通过INJECTION_POINT_CACHED()运行这些注入点。支持注入点中的运行时参数(Michael Paquier)§
允许使用
IS_INJECTION_POINT_ATTACHED()的内联注入点测试代码(Heikki Linnakangas)§使用 x86 AVX-512 指令加速 CRC32C 计算(Raghuveer Devulapalli, Paul Amonson)§
添加用于 popcount(整数位计数)的 ARM Neon 和 SVE CPU 内在函数(Chiranmoy Bhattacharya, Devanga Susmitha, Rama Malladi)§ §
添加配置选项
--with-libnuma以启用 NUMA 感知功能(Jakub Wartak, Bertrand Drouvot)§ § §函数
pg_numa_available()报告是否具备 NUMA 感知能力;系统视图pg_shmem_allocations_numa和pg_buffercache_numa报告共享内存在 NUMA 节点之间的分布。移除列
pg_attribute.attcacheoff(David Rowley)§将
amgettreeheight、amconsistentequality和amconsistentordering添加到索引访问方法 API(Mark Dilger)§ §添加 GiST 支持函数
stratnum()(Paul A. Jungwirth)§在 pg_controldata 中记录 CPU 对
char类型的默认有符号性(Masahiko Sawada)§在 PL/Python 中添加对 Python“Limited API”的支持(Peter Eisentraut)§§
这有助于防止由于 Python 3.x 版本不匹配引起的问题。
将最低支持的 Python 版本更改为 3.6.8(Jacob Champion)§
如果启用 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()报告。移除 Meson 上 Windows 构建的实验性标记(Aleksander Alekseev)§
移除配置选项
--disable-spinlocks和--disable-atomics(Thomas Munro)§ §现在需要 32 位原子操作。
移除对 HPPA/PA-RISC 架构的支持(Tom Lane)§
E.6.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_key 和 scram_server_key。为 file_fdw 添加
on_error和log_verbosity选项(Atsushi Torikoshi)§这些控制 file_fdw 如何处理和报告无效文件行。
添加
reject_limit以控制 file_fdw 可以忽略的无效行数(Atsushi Torikoshi)§这在
ON_ERROR = 'ignore'时激活。向 passwordcheck 添加可配置变量
min_password_length(Emanuele Musella, Maurizio Boriani)§这控制最小密码长度。
添加 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()现在返回缓冲区刷新状态。
E.6.3.9.1. pg_stat_statements #
允许 CREATE TABLE AS 和 DECLARE 的查询被 pg_stat_statements 跟踪(Anthonin Bonnefoy)§
它们现在也被分配了查询 ID。
允许在 pg_stat_statements 中对 SET 的值进行参数化(Greg Sabino Mullane, Michael Paquier)§
这减少了由于具有不同常量的
SET语句引起的数据膨胀。添加
pg_stat_statements列以报告并行活动(Guillaume Lelarge)§新列是
parallel_workers_to_launch和parallel_workers_launched。添加
pg_stat_statements.wal_buffers_full以报告满 WAL 缓冲区(Bertrand Drouvot)§
添加 pgcrypto 算法
sha256crypt和sha512crypt(Bernd Helmle)§添加函数
fips_mode()以报告服务器的 FIPS 模式(Daniel Gustafsson)§添加 pgcrypto 服务器变量
builtin_crypto_enabled以允许禁用内置非 FIPS 模式密码学函数(Daniel Gustafsson, Joe Conway)§这对于保证 FIPS 模式行为很有用。
E.6.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 |
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.