发布说明

PostgreSQL 17.0

E.10. 发布版本 17 #

发布日期:. 2024-09-26

E.10.1. 概述 #

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

  • VACUUM 提供新的内存管理系统,可减少内存消耗并提升整体清理性能。

  • 新的 SQL/JSON 能力,包括构造器、标识函数,以及可将 JSON 数据转换为表表示的 JSON_TABLE() 函数。

  • 各种查询性能改进,包括使用流式 I/O 的顺序读取、高并发下的写入吞吐量,以及在 btree 索引上对多个值的搜索。

  • 逻辑复制增强,包括:

    • 故障切换控制

    • pg_createsubscriber,这是一个从物理备用服务器创建逻辑副本的工具

    • pg_upgrade 现在会保留发布端的逻辑复制槽以及订阅端的完整订阅状态。这将使升级到未来主要版本时能够继续进行逻辑复制,而无需通过复制重新同步。

  • 新的客户端连接选项 sslnegotiation=direct,可直接执行 TLS 握手,以避免一次往返协商。

  • pg_basebackup 现在支持增量备份。

  • COPY 增加了一个新选项 ON_ERROR ignore,允许复制操作在发生错误时继续执行。

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

E.10.2. 迁移到版本 17 #

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

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

  • 更改函数,使其在维护操作期间使用安全的 search_path(Jeff Davis) § §

    这可防止维护操作(ANALYZECLUSTERCREATE INDEXCREATE MATERIALIZED VIEWREFRESH MATERIALIZED VIEWREINDEXVACUUM)执行不安全的访问。表达式索引和物化视图中使用、且需要引用非默认 schema 的函数,必须在创建函数时指定 search path。

  • 限制 ago 只能出现在 interval 值的末尾(Joseph Koshakow) § §

    同时,禁止空 interval 单位出现多次。

  • 移除服务器变量 old_snapshot_threshold(Thomas Munro) §

    该变量允许 vacuum 移除对正在运行事务而言理论上仍可能可见的行,从而在之后访问时引发“snapshot too old”错误。如果将来找到改进的实现方式,此功能可能会重新加入 PostgreSQL

  • 更改 SET SESSION AUTHORIZATION 对初始会话用户超级用户状态的处理方式(Joseph Koshakow) §

    新行为基于发出 SET SESSION AUTHORIZATION 命令时会话用户的超级用户状态,而不是其连接建立时的超级用户状态。

  • 移除模拟每数据库用户的功能(Nathan Bossart) §

    该功能即 db_user_namespace,使用得很少。

  • 移除 contrib 扩展 adminpack(Daniel Gustafsson) §

    它曾由现已终止支持的 pgAdmin III 使用。

  • Windows 上移除 wal_sync_methodfsync_writethrough 值(Thomas Munro) §

    该值在 Windows 上与 fsync 相同。

  • 更改两个 WAL 文件名函数对文件边界的处理方式(Kyotaro Horiguchi, Andres Freund, Bruce Momjian) §

    LSN 位于文件段边界时,pg_walfile_name()pg_walfile_name_offset() 过去会报告前一个 LSN 段号;现在则返回当前的 LSN 段。

  • 移除已不再需要的服务器变量 trace_recovery_messages(Bharath Rupireddy) §

  • 移除 information schemaelement_types.domain_default(Peter Eisentraut) §

  • 更改 pgrowlocks 的锁模式输出标签(Bruce Momjian) §

  • pg_stat_bgwriter 中移除 buffers_backendbuffers_backend_fsync(Bharath Rupireddy) §

    这些字段被认为与 pg_stat_io 中的类似列重复。

  • 重命名 pg_stat_statements 的 I/O 块读/写耗时统计列(Nazir Bilal Yavuz) §

    即将 blk_read_time 重命名为 shared_blk_read_time,并将 blk_write_time 重命名为 shared_blk_write_time

  • pg_attribute.attstattargetpg_statistic_ext.stxstattarget 表示默认统计目标的方式更改为 NULL(Peter Eisentraut) § §

  • pg_collation.colliculocale 重命名为 colllocale,并将 pg_database.daticulocale 重命名为 datlocale(Jeff Davis) §

  • pg_stat_progress_vacuum 的列 max_dead_tuples 重命名为 max_dead_tuple_bytes,将 num_dead_tuples 重命名为 num_dead_item_ids,并新增 dead_tuple_bytes(Masahiko Sawada) § §

  • 重命名系统视图 pg_stat_slru 中的 SLRU 列(Alvaro Herrera) §

    pg_stat_reset_slru() 接受的列名也随之更改。

E.10.3. 变更 #

下文详细说明 PostgreSQL 17 与上一主要版本之间的变更。

E.10.3.1. 服务器 #

E.10.3.1.1. 优化器 #
  • 允许优化器通过考虑较早行输出子句中所引用列的统计信息和排序顺序来改进 CTE 计划(Jian Guo, Richard Guo, Tom Lane) § §

  • 改进对 IS NOT NULLIS NULL 查询限制条件的优化(David Rowley, Richard Guo, Andy Fan) § §

    从对 NOT NULL 列的查询中移除 IS NOT NULL 限制条件,并在指定 IS NULL 时消除对 NOT NULL 列的扫描。

  • 允许在布尔列的 IS [NOT] UNKNOWN 条件下进行分区裁剪(David Rowley) §

  • 改进在使用包含运算符 <@ 和 @> 时对范围值的优化(Kim Johan Andersson, Jian He) §

  • 允许将相关 IN 子查询转换为连接(Andy Fan, Tom Lane) §

  • 改进在分区表、继承父表以及 UNION ALL 查询上对 LIMIT 子句的优化(Andy Fan, David Rowley) §

  • 允许在更多情况下并行运行查询节点(Tom Lane) §

  • 允许在内部重新排列 GROUP BY 列,以匹配 ORDER BY(Andrei Lepikhov, Teodor Sigaev) §

    这可使用服务器变量 enable_group_by_reordering 禁用。

  • 允许 UNION(不带 ALL)使用 MergeAppend(David Rowley) §

  • 修复 MergeAppend 计划,使其更准确地计算需要排序的行数(Alexander Kuzmenkov) §

  • 允许 GiSTSP-GiST 索引参与增量排序(Miroslav Bendik) §

    这对于首列具有 GiST 或 SP-GiST 索引而其他列没有的 ORDER BY 子句尤其有用。

  • pg_stats 添加列,以报告范围类型的直方图信息(Egor Rogov, Soumyadeep Chakraborty) §

E.10.3.1.2. 索引 #
  • 允许 btree 索引更高效地查找一组值,例如使用常量的 IN 子句所提供的值(Peter Geoghegan, Matthias van de Meent) §

  • 允许使用并行工作进程创建 BRIN 索引(Tomas Vondra, Matthias van de Meent) §

E.10.3.1.3. 总体性能 #
  • 允许 vacuum 更高效地移除和冻结元组(Melanie Plageman, Heikki Linnakangas) §

    vacuum 产生的 WAL 流量也更紧凑。

  • 允许 vacuum 更高效地存储元组引用(Masahiko Sawada, John Naylor) § § § §

    此外,当 maintenance_work_memautovacuum_work_mem 更高时,vacuum 不再被静默限制为最多使用 1 GB 内存。

  • 优化对没有索引的关系执行 vacuum(Melanie Plageman) §

  • vacuum_buffer_usage_limit 的默认值提高到 2MB(Thomas Munro) §

  • 改进在检查具有大量成员关系的角色时的性能(Nathan Bossart) §

  • 改进高竞争情况下 WAL 写入的性能(Bharath Rupireddy) §

  • 改进向客户端传输大块数据时的性能(Melih Mutlu) §

  • 允许使用新的系统变量 io_combine_limit 对文件系统读取进行分组(Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz) § § §

E.10.3.1.4. 监控 #
  • 创建系统视图 pg_stat_checkpointer(Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov) § § §

    已将相关列从 pg_stat_bgwriter 中移除,并加入这个新系统视图。

  • 改进对重置统计信息的控制(Atsushi Torikoshi, Bharath Rupireddy) § § §

    允许 pg_stat_reset_shared()(无参数)和 pg_stat_reset_shared(NULL) 重置所有共享统计信息。允许 pg_stat_reset_shared('slru') 和 pg_stat_reset_slru()(无参数)重置 SLRU 统计信息,而这在以前只能通过 pg_stat_reset_slru(NULL) 实现。

  • 添加与从备份恢复 WAL 相关的日志消息(Andres Freund) §

  • trust 连接添加 log_connections 日志行(Jacob Champion) §

  • 添加日志消息以报告 walsender 获取和释放复制槽(Bharath Rupireddy) §

    这由服务器变量 log_replication_commands 启用。

  • 添加用于报告等待事件类型的系统视图 pg_wait_events(Bertrand Drouvot) §

    这有助于为 pg_stat_activity 中报告的等待事件补充描述。

  • 为检查点延迟添加 等待事件(Thomas Munro) §

  • 允许 vacuum 报告索引处理进度(Sami Imseih) §

    这显示在系统视图 pg_stat_progress_vacuumindexes_totalindexes_processed 列中。

E.10.3.1.5. 权限 #
  • 允许授予执行维护操作的权限(Nathan Bossart) §

    该权限可以通过 MAINTAIN 权限按表授予,也可以通过预定义角色 pg_maintain 按角色授予。允许的操作包括 VACUUMANALYZEREINDEXREFRESH MATERIALIZED VIEWCLUSTERLOCK TABLE

  • 允许拥有 pg_monitor 成员资格的角色执行 pg_current_logfile()(Pavlo Golub, Nathan Bossart) §

E.10.3.1.6. 服务器配置 #
E.10.3.1.7. 流复制与恢复 #
  • 添加对增量文件系统备份的支持(Robert Haas, Jakub Wartak, Tomas Vondra) § §

    可使用 pg_basebackup 的新 --incremental 选项创建增量备份。新的应用程序 pg_combinebackup 允许处理基础和增量文件系统备份。

  • 允许创建 WAL 摘要文件(Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski) § § § §

    这些文件记录某个 LSN 范围内发生变化的块号,对增量文件系统备份很有用。这由服务器变量 summarize_walwal_summary_keep_time 控制,并可通过 pg_available_wal_summaries()pg_wal_summary_contents()pg_get_wal_summarizer_state() 进行查看。

  • 将系统标识符添加到文件系统 backup manifest 文件中(Amul Sul) §

    这有助于检测无效的 WAL 使用。

  • 允许在 pg_basebackup 将连接信息写入 postgresql.auto.conf 时写入连接字符串值 dbname(Vignesh C, Hayato Kuroda) §

  • 添加列 pg_replication_slots.invalidation_reason,用于报告复制槽失效的原因(Shveta Malik, Bharath Rupireddy) § §

  • 添加列 pg_replication_slots.inactive_since,用于报告复制槽的不活动持续时间(Bharath Rupireddy) § § §

  • 添加函数 pg_sync_replication_slots(),用于同步逻辑复制槽(Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut) § §

  • 复制协议添加 failover 属性(Hou Zhijie, Shveta Malik) §

E.10.3.1.8. 逻辑复制 #
  • 添加应用程序 pg_createsubscriber,用于从物理备用服务器创建逻辑副本(Euler Taveira) §

  • pg_upgrade 迁移有效的逻辑槽和订阅(Hayato Kuroda, Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal) § §

    这使逻辑复制能够在升级后快速继续。此功能仅适用于版本为 17 或更高的旧 PostgreSQL 集簇。

  • 启用 逻辑槽的故障切换(Hou Zhijie, Shveta Malik, Ajin Cherian) §

    这由 pg_create_logical_replication_slot() 的可选第五个参数控制。

  • 添加服务器变量 sync_replication_slots,以启用故障切换逻辑槽同步(Shveta Malik, Hou Zhijie, Peter Smith) § §

  • CREATE/ALTER SUBSCRIPTION 添加逻辑复制故障切换控制(Shveta Malik, Hou Zhijie, Ajin Cherian) § §

  • 允许逻辑复制变更的应用在订阅端使用 hash 索引(Hayato Kuroda) §

    以前只有 btree 索引可用于此目的。

  • 改进在存在大量子事务时 逻辑解码 的性能(Masahiko Sawada) §

  • 如果撤销订阅所有者的超级用户权限,则重启应用工作进程(Vignesh C) §

    这会强制重新认证。

  • pg_logical_emit_message() 添加 flush 选项(Michael Paquier) §

    这会使该消息具有持久性。

  • 允许指定在对订阅者可见之前必须先完成同步的物理备库(Hou Zhijie, Shveta Malik) § §

    新的服务器变量是 synchronized_standby_slots

  • pg_stat_subscription 添加工作进程类型列(Peter Smith) §

E.10.3.2. 实用命令 #

  • 添加新的 COPY 选项 ON_ERROR ignore,用于丢弃错误行(Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo Nagata) § § § §

    默认行为是 ON_ERROR stop

  • 添加新的 COPY 选项 LOG_VERBOSITY,用于报告 COPY FROM 忽略的错误行(Bharath Rupireddy) §

  • 允许 COPY FROM 在处理期间报告被跳过的行数(Atsushi Torikoshi) §

    这显示在系统视图列 pg_stat_progress_copy.tuples_skipped 中。

  • COPY FROM 中,允许方便地指定所有列都应被强制设为 null 或 not null(Zhang Mingli) §

  • 允许分区表拥有标识列(Ashutosh Bapat) §

  • 允许在分区表上使用 排他约束(Paul A. Jungwirth) §

    只要排他约束以相等比较分区键列,其他列就可以使用排他约束特有的比较方式。

  • 为将列设置为默认统计目标添加更清晰的 ALTER TABLE 方法(Peter Eisentraut) §

    新语法是 ALTER TABLE ... SET STATISTICS DEFAULT;仍然支持使用 SET STATISTICS -1

  • 允许 ALTER TABLE 更改列的生成表达式(Amul Sul) §

    语法为 ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION

  • 允许在分区表上指定 表访问方法(Justin Pryzby, Soumyadeep Chakraborty, Michael Paquier) § §

  • ALTER TABLE .. SET ACCESS METHOD 添加 DEFAULT 设置(Michael Paquier) §

  • 添加对在连接时触发的 事件触发器 的支持(Konstantin Knizhnik, Mikhail Gribkov) §

  • REINDEX 添加事件触发器支持(Garrett Thornburg, Jian He) §

  • 如果未指定表名,则允许 CLUSTER 选项使用带括号的语法(Nathan Bossart) §

E.10.3.2.1. EXPLAIN #
  • 允许 EXPLAIN 报告优化器内存使用情况(Ashutosh Bapat) §

    该选项名为 MEMORY

  • 添加 EXPLAIN 选项 SERIALIZE,用于报告为网络传输转换数据的成本(Stepan Rutz, Matthias van de Meent) §

  • EXPLAINBUFFERS 输出添加本地 I/O 块读/写耗时统计信息(Nazir Bilal Yavuz) §

  • 改进 EXPLAIN 对 SubPlan 节点和输出参数的显示(Tom Lane, Dean Rasheed) §

  • EXPLAIN 添加 JIT deform_counter 细节(Dmitry Dolgov) §

E.10.3.3. 数据类型 #

  • 允许 interval 数据类型支持 +/-infinity 值(Joseph Koshakow, Jian He, Ashutosh Bapat) §

  • 如果该类型是在同一事务中创建的,则允许使用通过 ALTER TYPE 新增的 ENUM 值(Tom Lane) §

    这在以前是不允许的。

E.10.3.4. MERGE #

  • 允许 MERGE 修改可更新视图(Dean Rasheed) §

  • MERGE 添加 WHEN NOT MATCHED BY SOURCE(Dean Rasheed) §

    以前已经支持在目标行上使用 WHEN NOT MATCHED

  • 允许 MERGE 使用 RETURNING 子句(Dean Rasheed) §

    新的 RETURNING 函数 merge_action() 会报告生成该行的 DML 操作。

E.10.3.5. 函数 #

  • 添加函数 JSON_TABLE(), 用于将 JSON 数据转换为表表示形式(Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Jian He) § §

    该函数可在 SELECT 查询的 FROM 子句中用作元组源。

  • 添加 SQL/JSON 构造函数 JSON()JSON_SCALAR()JSON_SERIALIZE()(Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote) §

  • 添加 SQL/JSON 查询函数 JSON_EXISTS()JSON_QUERY()JSON_VALUE()(Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Peter Eisentraut, Jian He) § § § § §

  • 添加 jsonpath 方法,用于将 JSON 值转换为其他数据类型(Jeevan Chalke) §

    这些 jsonpath 方法包括 .bigint().boolean(), .date(), .decimal([precision [, scale]]), .integer(), .number(), .string(), .time(), .time_tz(), .timestamp(), 以及 .timestamp_tz()

  • to_timestamp() 添加时区格式说明符(Tom Lane) §

    TZ 接受时区缩写或数字偏移,而 OF 只接受数字偏移。

  • 允许通过 AT LOCAL 指定会话 时区(Vik Fearing) §

    这在为时间戳值添加或移除时区,而不是显式指定会话时区字面量时很有用。

  • 添加函数 uuid_extract_timestamp()uuid_extract_version(),用于返回 UUID 信息(Andrey Borodin) §

  • 添加用于在指定范围内生成随机数的函数(Dean Rasheed) §

    这些函数是 random(min, max),其参数可为 integerbigintnumeric 类型的值。

  • 添加将整数转换为二进制和八进制字符串的函数(Eric Radman, Nathan Bossart) §

    这些函数是 to_bin()to_oct()

  • 添加 Unicode 信息函数(Jeff Davis) §

    函数 unicode_version() 返回 Unicode 版本,icu_unicode_version() 返回 ICU 版本,而 unicode_assigned() 返回字符是否已分配 Unicode 代码点。

  • 添加函数 xmltext(), 用于将文本转换为单个 XML 文本节点(Jim Jones) §

  • 添加函数 to_regtypemod(), 用于返回类型说明的类型修饰符(David Wheeler, Erik Wienhold) §

  • 添加函数 pg_basetype(), 用于返回域的基础类型(Steve Chavez) §

  • 添加函数 pg_column_toast_chunk_id(), 用于返回某个值的 TOAST 标识符(Yugo Nagata) §

    如果该值未存储在 TOAST 中,则返回 NULL

E.10.3.6. PL/pgSQL #

  • 允许 plpgsql 的 %TYPE%ROWTYPE 说明表示非数组类型的数组(Quan Zongliang, Pavel Stehule) §

  • 允许 plpgsql 的 %TYPE 说明引用复合类型列(Tom Lane) §

E.10.3.7. libpq #

  • 添加用于更改角色密码的 libpq 函数(Joe Conway) §

    新函数 PQchangePassword() 会在将新密码发送到服务器之前先对其进行哈希处理。

  • 添加用于关闭 portal 和预备语句的 libpq 函数(Jelte Fennema-Nio) §

    这些函数是 PQclosePrepared()PQclosePortal()PQsendClosePrepared() 以及 PQsendClosePortal()

  • 添加 libpq API,允许发起阻塞和非阻塞的 取消请求,并在已启用加密时使用加密(Jelte Fennema-Nio) §

    先前只支持阻塞且未加密的取消请求。

  • 添加 libpq 函数 PQsocketPoll(), 以允许对网络套接字进行轮询(Tristan Partin, Tom Lane) § §

  • 添加 libpq 函数 PQsendPipelineSync(), 用于发送管道同步点(Anton Kirilov) §

    这与 PQpipelineSync() 类似,但除非达到输出缓冲区的大小阈值,否则不会将数据刷新到服务器。

  • 添加 libpq 函数 PQsetChunkedRowsMode(), 以允许分块获取结果(Daniel Vérité) §

  • 允许 TLS 连接无需网络往返协商(Greg Stark, Heikki Linnakangas, Peter Eisentraut, Michael Paquier, Daniel Gustafsson) § § § § § § § §

    这通过客户端选项 sslnegotiation=direct, 启用,需要 ALPN,并且仅适用于 PostgreSQL 17 及更高版本的服务器。

E.10.3.8. psql #

  • 改进 psql 对默认权限和空权限的显示(Erik Wienhold, Laurenz Albe) §

    \dp 命令现在对空权限显示 (none);默认权限仍显示为空。

  • 使反斜杠命令遵循 \pset null(Erik Wienhold, Laurenz Albe) §

    先前 \pset null 会被忽略。

  • 允许 psql\watch 在返回行数达到最小值后停止(Greg Sabino Mullane) §

    该参数是 min_rows

  • 允许使用 control-C 取消 psql 的连接尝试(Tristan Partin) §

  • 允许 psql 在非 SELECT 查询中遵循 FETCH_COUNT(Daniel Vérité) §

  • 改进 psql 的 Tab 补全(Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Pavel Borisov, Jian He) § § § § § § § §

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

  • 添加应用程序 pg_walsummary, 用于转储 WAL 摘要文件(Robert Haas) §

  • 允许 pg_dump 的大型对象分批恢复(Tom Lane) §

    这使大量大型对象的恢复能够避开事务限制,并支持并行恢复。

  • 添加 pg_dump 选项 --exclude-extension(Ayush Vatsa) §

  • 允许 pg_dumppg_dumpallpg_restore 在文件中指定要包含或排除的对象(Pavel Stehule, Daniel Gustafsson) §

    该选项名为 --filter

  • 为多个客户端应用程序添加 --sync-method 参数(Justin Pryzby, Nathan Bossart) §

    这些应用程序是 initdbpg_basebackuppg_checksumspg_dumppg_rewindpg_upgrade

  • pg_restore 添加 --transaction-size 选项,允许按事务批次恢复对象(Tom Lane) §

    这既能获得事务批处理的性能收益,又能避免事务块过大的问题。

  • pgbench 的调试模式选项从 -d 改为 --debug(Greg Sabino Mullane) §

    -d 现在用于数据库名,同时也可以使用新的 --dbname 选项。

  • 添加 pgbench 选项 --exit-on-abort,以便在任一客户端中止后退出(Yugo Nagata) §

  • 添加 pgbench 命令 \syncpipeline,用于发送同步消息(Anthonin Bonnefoy) §

  • 允许 pg_archivecleanup 删除备份历史文件(Atsushi Torikoshi) §

    该选项是 --clean-backup-history

  • pg_archivecleanup 添加一些长选项(Atsushi Torikoshi) §

    这些长选项是 --debug--dry-run--strip-extension

  • 允许 pg_basebackuppg_receivewal 在其连接字符串中使用 dbname(Jelte Fennema-Nio) §

    这对那些对数据库名敏感的连接池很有用。

  • 添加 pg_upgrade 选项 --copy-file-range(Thomas Munro) §

    这在 LinuxFreeBSD 上受支持。

  • 允许 reindexdb--index 并行处理来自不同表的索引(Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov) §

  • 允许 reindexdbvacuumdbclusterdb 在所有匹配模式的数据库中处理对象(Nathan Bossart) § § §

    新选项 --all 控制此行为。

E.10.3.10. 源代码 #

  • 移除对 OpenSSL 1.0.1 的支持(Michael Paquier) §

  • 允许测试在 OpenSSL FIPS 模式下通过(Peter Eisentraut) § §

  • 使用 CPU AVX-512 指令进行位计数(Paul Amonson, Nathan Bossart, Ants Aasma) § §

  • 要求 LLVM 版本为 10 或更高(Thomas Munro) §

  • 在 64 位 LoongArch CPU 上使用原生 CRC 指令(Xudong Yang) §

  • 移除对 AIX 的支持(Heikki Linnakangas) §

  • 移除 Microsoft Visual Studio 专用的 PostgreSQL 构建选项(Michael Paquier) §

    Meson 现在是 Visual Studio 构建的唯一可用方法。

  • 移除 configure 选项 --disable-thread-safety(Thomas Munro, Heikki Linnakangas) § §

    我们现在假定所有受支持的平台都具有足够的线程支持。

  • 移除 configure 选项 --with-CC(Heikki Linnakangas) §

    现在指定编译器的唯一受支持方法是设置 CC 环境变量。

  • 用户定义的数据类型接收函数将不再接收到以空字符终止的数据(David Rowley) §

  • 添加增量式 JSON 解析器,以用于超大的 JSON 文档(Andrew Dunstan) §

  • 将顶层 README 文件转换为 Markdown(Nathan Bossart) §

  • 移除不再需要的顶层 INSTALL 文件(Tom Lane) §

  • 移除 makedistprep 选项(Peter Eisentraut) §

  • make 添加对 Android 共享库的支持(Peter Eisentraut) §

  • 添加后端对注入点的支持(Michael Paquier) § § § §

    这用于服务器调试,并且必须在服务器编译时启用。

  • 添加动态共享内存注册表(Nathan Bossart) §

    这使得那些未在启动时初始化的共享库也能够协调对动态共享内存的访问。

  • 修复 emit_log_hook,使其对同一查询使用与其他日志记录相同的时间值(Kambam Vinay, Michael Paquier) §

  • 改进关于使用 jsonpath 进行谓词检查的文档(David Wheeler) §

E.10.3.11. 附加模块 #

  • 允许将带有非连接限制条件的连接下推到外部服务器和自定义扫描中(Richard Guo, Etsuro Fujita) §

    外部数据包装器和自定义扫描需要修改才能处理这些情况。

  • 允许将 EXISTSIN 子查询下推到 postgres_fdw 外部服务器(Alexander Pyhalov) §

  • 提高默认的外部数据包装器元组代价(David Rowley, Umair Shahid) § §

    该值由优化器使用。

  • 允许中断 dblink 的数据库操作(Noah Misch) §

  • 允许在 ltree 列上创建哈希索引(Tommy Pavlicek) §

    这也使得能够在 ltree 列上进行哈希连接和哈希聚合。

  • 允许 unaccent 的字符转换规则包含空白字符和引号(Michael Paquier) §

    unaccent.rules 文件的语法已更改。

  • 允许 amcheck 使用新选项 --checkunique 检查唯一约束违反(Anastasia Lubennikova, Pavel Borisov, Maxim Orlov) §

  • 允许 citext 的测试在 OpenSSL FIPS 模式下通过(Peter Eisentraut) §

  • 允许 pgcrypto 的测试在 OpenSSL FIPS 模式下通过(Peter Eisentraut) §

  • 移除一些未使用的 SPI 宏(Bharath Rupireddy) §

  • 允许 ALTER OPERATOR 设置更多优化属性(Tommy Pavlicek) §

    这对扩展很有用。

  • 允许扩展定义 自定义等待事件(Masahiro Ikeda) § § § §

    已为 postgres_fdwdblink 添加自定义等待事件。

  • 添加 pg_buffercache 函数 pg_buffercache_evict(),以允许逐出共享缓冲区(Palak Chaturvedi, Thomas Munro) §

    这对测试很有用。

E.10.3.11.1. pg_stat_statements #
  • pg_stat_statementsCALL 的参数替换为占位符(Sami Imseih) §

  • 将存储在 pg_stat_statements 中的保存点名称替换为占位符(Greg Sabino Mullane) §

    这会大幅减少记录 SAVEPOINTRELEASE SAVEPOINTROLLBACK TO SAVEPOINT 命令所需的条目数量。

  • 将存储在 pg_stat_statements 中的两阶段提交 GID 替换为占位符(Michael Paquier) §

    这会大幅减少记录 PREPARE TRANSACTIONCOMMIT PREPAREDROLLBACK PREPARED 所需的条目数量。

  • pg_stat_statements 中跟踪 DEALLOCATE(Dagfinn Ilmari Mannsåker, Michael Paquier) §

    DEALLOCATE 名称在 pg_stat_statements 中存储为占位符。

  • pg_stat_statements 添加本地 I/O 块读/写耗时统计列(Nazir Bilal Yavuz) § §

    新列是 local_blk_read_timelocal_blk_write_time

  • pg_stat_statements 添加 JIT deform_counter 细节(Dmitry Dolgov) §

  • pg_stat_statements_reset() 添加可选的第四个参数 (minmax_only),以允许仅重置最小/最大统计信息(Andrei Zubkov) §

    该参数默认为 false

  • pg_stat_statements 添加列 stats_sinceminmax_stats_since,用于跟踪条目创建时间以及上次最小/最大值重置时间(Andrei Zubkov) §

E.10.4. 致谢 #

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

Abhijit Menon-Sen
Adnan Dautovic
Aidar Imamov
Ajin Cherian
Akash Shankaran
Akshat Jaimini
Alaa Attya
Aleksander Alekseev
Aleksej Orlov
Alena Rybakina
Alex Hsieh
Alex Malek
Alex Shulgin
Alex Work
Alexander Korotkov
Alexander Kozhemyakin
Alexander Kuzmenkov
Alexander Lakhin
Alexander Pyhalov
Alexey Palazhchenko
Alfons Kemper
Álvaro Herrera
Amadeo Gallardo
Amit Kapila
Amit Langote
Amul Sul
Anastasia Lubennikova
Anatoly Zaretsky
Andreas Karlsson
Andreas Ulbrich
Andrei Lepikhov
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Atkinson
Andrew Bille
Andrew Dunstan
Andrew Kane
Andrey Borodin
Andrey Rachitskiy
Andrey Sokolov
Andy Fan
Anthonin Bonnefoy
Anthony Hsu
Anton Kirilov
Anton Melnikov
Anton Voloshin
Antonin Houska
Ants Aasma
Antti Lampinen
Aramaki Zyake
Artem Anisimov
Artur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Atsushi Torikoshi
Attila Gulyás
Ayush Tiwari
Ayush Vatsa
Bartosz Chrol
Benoît Ryder
Bernd Helmle
Bertrand Drouvot
Bharath Rupireddy
Bo Andreson
Boshomi Phenix
Bowen Shi
Boyu Yang
Bruce Momjian
Cameron Vogt
Cary Huang
Cédric Villemain
Changhong Fei
Chantal Keller
Chapman Flack
Chengxi Sun
Chris Travers
Christian Maurer
Christian Stork
Christoph Berg
Christoph Heiss
Christophe Courtois
Christopher Kline
Claudio Freire
Colin Caine
Corey Huinker
Curt Kolovson
Dag Lem
Dagfinn Ilmari Mannsåker
Damir Belyalov
Daniel Fredouille
Daniel Gustafsson
Daniel Shelepanov
Daniel Vérité
Daniel Westermann
Darren Rush
Dave Cramer
Dave Page
David Christensen
David Cook
David G. Johnston
David Geier
David Hillman
David Perez
David Rowley
David Steele
David Wheeler
David Zhang
Dean Rasheed
Denis Erokhin
Denis Laxalde
Devrim Gündüz
Dilip Kumar
Dimitrios Apostolou
Dmitry Dolgov
Dmitry Koval
Dmitry Vasiliev
Dominique Devienne
Dong Wook Lee
Donghang Lin
Dongming Liu
Drew Callahan
Drew Kimball
Dzmitry Jachnik
Egor Chindyaskin
Egor Rogov
Ekaterina Kiryanova
Elena Indrupskaya
Elizabeth Christensen
Emre Hasegeli
Eric Cyr
Eric Mutta
Eric Radman
Eric Ridge
Erik Rijkers
Erik Wienhold
Erki Eessaar
Ethan Mertz
Etsuro Fujita
Eugen Konkov
Euler Taveira
Evan Macbeth
Evgeny Morozov
Fabien Coelho
Fabrízio de Royes Mello
Farias de Oliveira
Feliphe Pozzer
Fire Emerald
Flavien Guedez
Floris Van Nee
Francesco Degrassi
Frank Streitzig
Gabriele Bartolini
Garrett Thornburg
Gavin Flower
Gavin Panella
Gilles Darold
Gilles Parc
Grant Gryczan
Greg Nancarrow
Greg Sabino Mullane
Greg Stark
Gurjeet Singh
Haiying Tang
Hajime Matsunaga
Hal Takahara
Hanefi Onaldi
Hannu Krosing
Hans Buschmann
Hao Wu
Hao Zhang
Hayato Kuroda
Heikki Linnakangas
Hemanth Sandrana
Himanshu Upadhyaya
Hironobu Suzuki
Holger Reise
Hongxu Ma
Hongyu Song
Horst Reiterer
Hubert Lubaczewski
Hywel Carver
Ian Barwick
Ian Ilyasov
Ilya Nenashev
Isaac Morland
Israel Barth Rubio
Ivan Kartyshov
Ivan Kolombet
Ivan Lazarev
Ivan Panchenko
Ivan Trofimov
Jacob Champion
Jacob Speidel
Jacques Combrink
Jaime Casanova
Jakub Wartak
James Coleman
James Pang
Jani Rahkola
Japin Li
Jeevan Chalke
Jeff Davis
Jeff Janes
Jelte Fennema-Nio
Jeremy Schneider
Jian Guo
Jian He
Jim Jones
Jim Keener
Jim Nasby
Jingtang Zhang
Jingxian Li
Jingzhou Fu
Joe Conway
Joel Jacobson
John Ekins
John Hsu
John Morris
John Naylor
John Russell
Jonathan Katz
Jordi Gutiérrez
Joseph Koshakow
Josh Kupershmidt
Joshua D. Drake
Joshua Uyehara
Jubilee Young
Julien Rouhaud
Junwang Zhao
Justin Pryzby
Kaido Vaikla
Kambam Vinay
Karen Talarico
Karina Litskevich
Karl O. Pinc
Kashif Zeeshan
Kim Johan Andersson
Kirill Reshke
Kirk Parker
Kirk Wolak
Kisoon Kwon
Koen De Groote
Kohei KaiGai
Kong Man
Konstantin Knizhnik
Kouhei Sutou
Krishnakumar R
Kuntal Ghosh
Kurt Roeckx
Kyotaro Horiguchi
Lang Liu
Lars Kanis
Laurenz Albe
Lauri Laanmets
Legs Mansion
Lukas Fittl
Magnus Hagander
Mahendrakar Srinivasarao
Maiquel Grassi
Manos Emmanouilidis
Marcel Hofstetter
Marcos Pegoraro
Marian Krucina
Marina Polyakova
Mark Dilger
Mark Guertin
Mark Sloan
Markus Winand
Marlene Reiterer
Martín Marqués
Martin Nash
Martin Schlossarek
Masahiko Sawada
Masahiro Ikeda
Masaki Kuwamura
Masao Fujii
Mason Sharp
Matheus Alcantara
Mats Kindahl
Matthias Kuhn
Matthias van de Meent
Maxim Boguk
Maxim Orlov
Maxim Yablokov
Maxime Boyer
Melanie Plageman
Melih Mutlu
Merlin Moncure
Micah Gate
Michael Banck
Michael Bondarenko
Michael Paquier
Michael Wang
Michael Zhilin
Michail Nikolaev
Michal Bartak
Michal Kleczek
Mikhail Gribkov
Mingli Zhang
Miroslav Bendik
Mitsuru Hinata
Moaaz Assali
Muralikrishna Bandaru
Nathan Bossart
Nazir Bilal Yavuz
Neil Tiffin
Ngigi Waithaka
Nikhil Benesch
Nikhil Raj
Nikita Glukhov
Nikita Kalinin
Nikita Malakhov
Nikolay Samokhvalov
Nikolay Shaplov
Nisha Moond
Nishant Sharma
Nitin Jadhav
Noah Misch
Noriyoshi Shinoda
Ole Peder Brandtzæg
Oleg Bartunov
Oleg Sibiryakov
Oleg Tselebrovskiy
Olleg Samoylov
Onder Kalaci
Ondrej Navratil
Pablo Kharo
Palak Chaturvedi
Pantelis Theodosiou
Paul Amonson
Paul Jungwirth
Pavel Borisov
Pavel Kulakov
Pavel Luzanov
Pavel Stehule
Pavlo Golub
Pedro Gallegos
Pete Storer
Peter Eisentraut
Peter Geoghegan
Peter Smith
Philip Warner
Philipp Salvisberg
Pierre Ducroquet
Pierre Fortin
Przemyslaw Sztoch
Quynh Tran
Raghuveer Devulapalli
Ranier Vilela
Reid Thompson
Rian McGuire
Richard Guo
Richard Vesely
Ridvan Korkmaz
Robert Haas
Robert Scott
Robert Treat
Roberto Mello
Robins Tharakan
Roman Lozko
Ronan Dunklau
Rui Zhao
Ryo Matsumura
Ryoga Yoshida
Sameer Kumar
Sami Imseih
Samuel Dussault
Sanjay Minni
Satoru Koizumi
Sebastian Skalacki
Sergei Glukhov
Sergei Kornilov
Sergey Prokhorenko
Sergey Sargsyan
Sergey Shinderuk
Shaozhong Shi
Shaun Thomas
Shay Rojansky
Shihao Zhong
Shinya Kato
Shlok Kyal
Shruthi Gowda
Shubham Khanna
Shulin Zhou
Shveta Malik
Simon Riggs
Soumyadeep Chakraborty
Sravan Velagandula
Stan Hu
Stepan Neretin
Stepan Rutz
Stéphane Schildknecht
Stephane Tachoires
Stephen Frost
Steve Atkins
Steve Chavez
Suraj Khamkar
Suraj Kharage
Svante Richter
Svetlana Derevyanko
Sylvain Frandaz
Takayuki Tsunakawa
Tatsuo Ishii
Tatsuro Yamada
Tender Wang
Teodor Sigaev
Thom Brown
Thomas Munro
Tim Carey-Smith
Tim Needham
Tim Palmer
Tobias Bussmann
Tom Lane
Tomas Vondra
Tommy Pavlicek
Tomonari Katsumata
Tristan Partin
Tristen Raab
Tung Nguyen
Umair Shahid
Uwe Binder
Valerie Woolard
Vallimaharajan G
Vasya Boytsov
Victor Wagner
Victor Yegorov
Victoria Shepard
Vidushi Gupta
Vignesh C
Vik Fearing
Viktor Leis
Vinayak Pokale
Vitaly Burovoy
Vojtech Benes
Wei Sun
Wei Wang
Wenjiang Zhang
Will Mortensen
Willi Mann
Wolfgang Walther
Xiang Liu
Xiaoran Wang
Xing Guo
Xudong Yang
Yahor Yuzefovich
Yajun Hu
Yaroslav Saburov
Yong Li
Yongtao Huang
Yugo Nagata
Yuhang Qiu
Yuki Seino
Yura Sokolov
Yurii Rashkovskii
Yuuki Fujii
Yuya Watari
Yves Colin
Zhihong Yu
Zhijie Hou
Zongliang Quan
Zubeyr Eryilmaz
Zuming Jiang