PostgreSQL 16

PostgreSQL 16 是最新发布的 PostgreSQL 主版本,于 2023 年 9 月 14 日发布。

次要版本发布

源代码和构建更改

构建系统

  • 添加了对 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

  • 在对表进行 vacuum 时识别配置更改(提交 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

性能改进

  • ORDER BY / DISTINCT 聚合的性能得到提升(提交 1349d279
  • GROUP BYDISTINCT 中对重复列的优化分组(提交 8d83a5d0
  • 分区表 进行批量插入和更新变得更加高效(提交 3592e0ff
  • 快照中的查找优化(提交 37a6e5dfb6ef167582739d4a
  • 字符串到整数转换的性能得到提升(提交 6b423ec6
  • 更有效地添加堆页和索引页(提交 31966b1526158b8500d1e02b

数据类型更改

一般

  • 添加了对二进制、八进制和十六进制整数字面量的支持(提交 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
  • LogCheckpointEnd 日志消息中显示了 检查点 和恢复点 LSN(提交 62c46eee
  • 自动真空日志输出和 VACUUM VERBOSE 输出现在包括一行,其中包含冻结了一个或多个元组的堆页总数,以及冻结的元组总数(提交 d977ffd9
  • 现在在一些与 WAL 页相关的错误消息中包含了 LSN(提交 71cb84ec

用户/角色

身份验证更改

一般

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

pg_hba.conf

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

pg_ident.conf

  • 添加了对文件包含的支持(提交 a54b658c
  • 添加了对非文字用户名匹配的支持,例如在 pg_hba.conf 中(提交 efb6f4a4

过程语言更改

PL/pgSQL

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

复制更改

逻辑复制

  • 发布 可以包含来自同一模式的模式和单个表(提交 13a185f5
  • 可以创建订阅,这些订阅会跳过具有复制来源的数据(提交 36628396
  • 并行工作者应用大型事务(提交 216a7848
  • 添加了回调 ReorderBufferUpdateProgressTxnCB,以避免在长时间运行的 DDL 操作期间出现逻辑复制超时风险(提交 8c58624d
  • 在应用 UPDATE/DELETE 时,订阅者可以使用除 PRIMARY KEYREPLICA IDENTITY 之外的索引(提交 89e46da5
  • 现在可以以二进制格式复制表(提交 ecb69652
  • 逻辑复制现在以表所有者的身份执行(提交 1e10d49b
  • 逻辑解码现在在备用服务器上支持(提交 0fdab27a
  • 逻辑复制槽现在可以失效(提交 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/--progress 已添加 (d07c2948)
  • vacuumdb
    • 选项 --schema--exclude-schema 已添加(提交 7781f4e3
    • 选项 --buffer-usage-limit 已添加(提交ae78cae3

服务器实用程序

已修改

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

以下 CommitFests 是针对 PostgreSQL 16 代码提交的