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

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

字符集和排序规则

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

错误处理

  • 支持“软”错误报告 (提交 d9f7f5d3

扩展

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

钩子

物化视图

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

规划器

postmaster

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

WAL

  • freeze WAL 记录中的 freeze 计划已去重 (提交 9e540599)

walreceiver

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

walsender

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

性能改进

数据类型更改

通用

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

索引更改

通用

  • 禁止为主键创建 NULLS NOT DISTINCT 索引 (提交 d9595232)

BRIN

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

哈希索引

SQL 更改

通用

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

已修改

系统目录更改

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

配置更改

通用

已添加

已修改

移除

平台支持变更

HP/Intel Itanium

HP-UX

Windows

  • 移除了对 Windows 10 以下版本的支持 (提交 495ed0ef)

日志记录更改

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

用户/角色

认证更改

通用

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

pg_hba.conf

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

pg_ident.conf

过程语言更改

PL/pgSQL

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

复制更改

逻辑复制 (Logical replication)

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

libpq 更改

通用

  • 使用 SOCK_CLOEXECSOCK_NONBLOCK,如果可用 (提交 bfc9497e)
  • 添加了连接参数 load_balance_hosts,支持连接负载均衡 (提交 7f5b1981)

连接参数

已添加

外部数据包装器 (FDW) 更改

  • 现在允许在 外部表 上触发 TRUNCATE (提交 3b00a944)
  • 如果 FDW 支持,COPY 现在可以为批量插入将元组传递给 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
    • 如果服务器使用 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)
  • 添加了对并行 abort 的支持 (提交 983ec230)
  • 添加了对 TRUNCATE 触发器的支持 (提交 3b00a944)
  • 当客户端将 GSSAPI 凭证委派给服务器,并且使用 GSSAPI 对远程系统进行身份验证时,允许非超级用户进行无密码连接 (提交 3d4fa227)

测试

pg_regress

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

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

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

CommitFests

以下 CommitFests 用于 PostgreSQL 16 代码提交