PostgreSQL 16

次要版本发布

源代码和构建更改

构建系统

  • 添加了对 Meson 构建系统支持(初始提交 e6927270)

源代码配置

  • 添加了选项 --with-segsize-blocks(提交 d3b111e3)

pgindent

  • 删除了已弃用的选项 --code-base--build(提交 b16259b3)
  • 添加了 --commit 选项(提交 068a243bdab07e8c)
  • 现在可以提供多个 --excludes 选项(提交 a1c4cd6f)
  • 添加了 --show-diff--silent-diff 选项(提交 b90f0b57)
  • pg_bsd_ident 源代码导入核心存储库(提交 4e831f4c)

后端更改

常规

  • 自动创建查询混淆的代码,现在支持实用程序语句(提交 3db72ebc)

autovacuum

  • 在清理表时识别配置更改(提交 7d71d3dd)

字符集和排序规则

  • 添加了标准排序规则 unicodeucs_basic(提交 0d21d4b9)

扩展

  • 添加了 @extschema:name@no_relocate 选项(提交 72a5b1fc)

钩子

物化视图

  • 物化视图参与谓词锁定(提交 43351557)

计划器

  • 用于处理窗口函数的支持函数(提交 ed1a88dd)
  • 添加了对“右反连接”计划形状的支持(提交 16dc2703)

postmaster

  • 删除了选项 -n(提交 51b5834c)
  • 选项 -T 现在发送 SIGABRT 而不是 SIGSTOP(提交 51b5834c)
  • postmaster 符号链接不再安装,这意味着始终通过 postgres 二进制文件直接调用后端(提交 37e26733)

WAL

  • 冻结 WAL 记录中冻结的计划进行重复数据删除(提交 9e540599)

walreceiver

  • 唤醒间隔更针对实际的待处理工作(提交 05a7be93)

walsender

  • ps 显示中显示数据库名称(提交 af205152)

性能改进

数据类型更改

常规

  • 添加了对二进制、八进制和十六进制整数字面量的支持(提交 6fcda9ab
  • +infinity 现在可以作为 datetimestamp 类型的输入(提交 2ceea5ad

索引更改

常规

  • 不允许为主键使用 NULLS NOT DISTINCT 索引(提交 d9595232

BRIN

  • 检查 HOT 更新时,现在会忽略 BRIN 索引(提交 19d8e230

哈希索引

  • 提高了哈希索引构建的速度(提交 e09d7a12

SQL 更改

常规

  • FROM 子句子查询别名不再是必需的(提交 bcedd8f5
  • 添加了对 ANY_VALUE 聚合函数的支持(提交 2ddab010
  • 现在支持 SYSTEM_USER 保留关键字(提交 0823d061
  • 添加了 IS JSON 谓词(提交 6ee30209

已修改

系统目录更改

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

配置更改

常规

已添加

已修改

已移除

平台支持更改

HP/Intel Itanium

HP-UX

Windows

  • 移除对低于 Windows 10 版本的支持(提交 495ed0ef)

索引更改

  • 提高了哈希索引构建速度(提交 d09dbeb9)

日志记录更改

  • 添加了内部 log_status_format()emit_log_hook 等使用(提交 b40baa96)
  • 检查点 和恢复点 LSN 显示在 LogCheckpointEnd 日志消息中(提交 62c46eee)
  • 自动真空日志输出和 VACUUM VERBOSE 输出现在包含一行,其中包含具有一个或多个冻结元组的堆页面的总数,以及冻结的元组总数(提交 d977ffd9)
  • LSN 现在包含在一些与 WAL 页面相关的错误消息中(提交 71cb84ec)

用户/角色

身份验证更改

常规

  • 添加了对 Kerberos 凭据委托的支持(初始提交 3d4fa227)

pg_hba.conf

  • 为数据库和用户条目添加了正则表达式 (regexp) 支持(提交 8fea8683)
  • 添加了对文件包含的支持(提交 a54b658c)

pg_ident.conf

过程语言更改

PL/pgSQL

  • 绑定游标变量不再具有预分配的门户名称(提交 d747dc85
  • 可以通过新的诊断变量 PG_ROUTINE_OID 检索当前函数的 OID(提交 d3d53f95

复制更改

逻辑复制

  • 发布 可以包含来自同一模式的模式和单个表(提交 13a185f5
  • 可以创建跳过具有复制源数据的订阅(提交 36628396
  • 并行工作器应用的大型事务(提交 216a7848
  • 添加回调函数 ReorderBufferUpdateProgressTxnCB 以避免在长时间运行的 DDL 操作期间发生逻辑复制超时风险(提交 8c58624d
  • 在应用 UPDATE/DELETE 期间,订阅者可以使用除 PRIMARY KEYREPLICA IDENTITY 之外的索引(提交 89e46da5
  • 现在可以以二进制格式复制表(提交 ecb69652
  • 逻辑复制现在作为表所有者执行(提交 1e10d49b
  • 现在在备用服务器上支持逻辑解码(提交 0fdab27a
  • 逻辑复制槽现在可以由于地平线或 wal_level 而失效(提交 be87200e

libpq 更改

常规

  • 在可用时使用 SOCK_CLOEXECSOCK_NONBLOCK(提交 bfc9497e
  • 添加了连接参数 load_balance_hosts,提供对连接负载均衡的支持(提交 7f5b1981

连接参数

已添加

外部数据包装器 更改

  • 现在允许对 外部表 使用 TRUNCATE 触发器(提交 3b00a944
  • COPY 现在可以将元组传递给 FDW 以进行批量插入,如果 FDW 提供此功能(提交 97da4824
  • 现在可以在跨分区更新期间批量插入(提交 594f8d37

信息模式 更改

  • 更新为支持 SQL:2023(提交 f275af8c

核心实用程序

已修改

  • createdb
    • 添加选项 --icu-rules(提交 30a53b79
  • createuser
    • 选项 --role 重命名为 --member-of--role 保留为已弃用的选项)(提交 2dcd1578
    • 添加以下选项(初始提交 08951a7c
      • -a/--with-admin
      • --bypassrls/--no-bypassrls
      • -m/--with-member
      • --valid-until
  • pg_dump
    • 选项 -Z/--compress 现在可以指定压缩方法(提交 5e73a604
    • 现在在启动期间批量获取锁(提交 5f53b42c
    • 添加了 LZ4 压缩(提交 0da243fe
    • 添加以下选项(a563c24c
      • --table-and-children
      • --exclude-table-and-children
      • --exclude-table-data-and-children
    • 添加了 zstd 压缩(提交 84adc8e2
  • pg_verifybackup
    • 添加选项 -P/--progressd07c2948
  • vacuumdb
    • 添加选项 --schema--exclude-schema(提交 7781f4e3
    • 添加选项 --buffer-usage-limit(提交 ae78cae3

服务器实用程序

已修改

  • initdb
    • 添加选项 --icu-rules(提交 30a53b79
    • 如果服务器使用 ICU 构建,则选项 --locale-provider 默认为 icu(提交 27b62377
    • 添加选项 -c/--set(提交 3e51b278
  • pg_rewind
    • 修复了服务器提升后的 TLI 确定(009eeee7
  • pg_upgrade
    • 添加选项 --copy(提交 746915c6
  • pg_waldump
    • 添加选项 --save-fullpage(提交 d497093c
    • 选项 -t/--timeline 现在接受十六进制值(提交 4c8044c0
    • 使用选项 --save-fullpage 生成的文件名中现在包含时间线 ID(提交 b381d963

psql

  • 添加命令 \drg(提交 0a1d2a7d
  • 添加命令 \pset 选项 xheader_width(提交 a45388d6
  • 现在,对 分区表 使用 \d+ 会指示外部分区(提交 bd95816f
  • 添加命令 \bind 用于设置查询参数并使用扩展查询协议(提交 5b66de34
  • 添加命令 \dpS\zS(提交 d913928c
  • \df+ 显示“内部名称”而不是“源代码”(提交 3dfae91f
  • 添加了魔法变量 SHELL_ERRORSHELL_EXIT_CODE(提交 b0d8f2d931ae2aa9
  • \watch 命令添加了可选的执行计数限制(提交 00beecfe

Contrib 模块更改

auto_explain

  • 添加选项 auto_explain.log_parameter_max_length(提交 d4bfe412
  • 当客户端已将 GSSAPI 凭据委托给服务器并且 GSSAPI 用于对远程系统进行身份验证时,允许非超级用户无密码连接(提交 3d4fa227

fuzzystrmatch

  • 支持 Daitch-Mokotoff Soundex(提交 a290378a

ltree

  • 最大标签长度扩展到 1000 个字符,并且标签可以包含连字符(提交 b1665bf0

pageinspect

  • 添加函数 bt_multi_page_stats()(提交 1fd3dd20
  • 向函数 brin_page_items() 添加列 empty(提交 428c0cae

pg_buffercache

  • 添加函数 pg_buffercache_summary()(提交 2589434a
  • 添加函数 pg_buffercache_usage_counts()(提交 f3fa3132

pg_stat_statements

  • 添加了实用程序语句的查询混排(提交 3db72ebc

pg_walinspect

  • 添加了函数 pg_get_wal_block_info()(提交 c31cf1c0,最初为 pg_get_wal_fpi_info(),但在提交 9ecb134a 中重命名并扩展)
  • 函数 pg_get_wal_records_info()pg_get_wal_stats()pg_get_wal_block_info() 接受高于当前 LSN 的 LSN 值(提交 5c1b6628
  • 删除了函数 pg_get_wal_records_info_till_end_of_wal()pg_get_wal_stats_till_end_of_wal()(提交 5c1b6628

postgres_fdw

  • 可以使用表采样提取 ANALYZE 返回的数据(提交 8ad51b5f
  • 添加了选项 analyze_sampling(提交 8ad51b5f
  • 添加了对并行中止的支持(提交 983ec230
  • 添加了对 TRUNCATE 触发器的支持(提交 3b00a944
  • 当客户端已将 GSSAPI 凭据委托给服务器并且 GSSAPI 用于对远程系统进行身份验证时,允许非超级用户无密码连接(提交 3d4fa227

测试

pg_regress

  • 输出现在符合 TAP 标准(提交 558fff0a

发布计划和预发布测试版本

标记 PostgreSQL 16 开发开始的初始提交是 d31d3097(2022-06-30)。

CommitFests

以下 CommitFest 用于 PostgreSQL 16 代码提交