PostgreSQL 15

次要版本发布

后端更改

一般

源代码配置

  • 添加了 --with-zstd 选项 (初始提交 6c417bbc)

ABI

  • PostgreSQL 分支现在可以明确地声明其 ABI 不兼容 (提交 d6d1dfcc)

备份

执行器

  • 单调窗口函数的执行得到改进 (提交 9d9c02cc)

钩子

添加

修改

日志记录

  • 添加了针对过度 ProcSignalBarrier 等待的日志记录 (提交 0d343149)
  • 通过 log_destination 选项 jsonlog 添加了 JSON 格式的日志输出 (dc686681)

权限

计划器

  • 单调窗口函数的执行得到改进 (提交 9d9c02cc)

postmaster

  • 选项 --forkboot 重命名为 --forkaux (提交 50017f77)
  • CREATE 权限现在默认情况下始终从 PUBLIC 中撤销,现在由 pg_database_owner 角色拥有 (提交 b073c3cc)
  • 选项 -C 现在显示运行时计算的 GUC (提交 0c39c292)

序列

  • 添加了非日志序列 (提交 344d62fb)

统计收集器

  • 被共享内存实现取代 (提交 5891c7a8)

vacuum

  • VACUUM VERBOSEautovacuum 操作现在报告 relfrozenxidrelminmxid 如何推进的详细信息 (提交 872770fd)

WAL

  • 全页写入可以用以下方法压缩
  • 添加了对自定义资源管理器的支持 (提交 5c279a6d)
  • 添加了对 WAL 预取的支持 (提交 5dc0418f)
  • 改进了 pg_wal/archive_status 目录扫描的性能 (提交 beb4e9ba)

数据类型更改

一般

  • 添加了用于“内部使用”类型的新类型类别 (提交 07eee5a0)

修改

  • JSON
    • 添加了以下 SQL/JSON 标准构造函数 (提交 f79b803d 和  f4fb45d1): 已撤回 (提交 2f2b18bd)
      • JSON_ARRAY()
      • JSON_ARRAYAGG()
      • JSON_OBJECT()
      • JSON_OBJECTAGG()
    • JSON_TABLE() 构造函数已添加 (提交 4e34747c) 已撤回 (提交 2f2b18bd)
    • 添加了以下 SQL/JSON 查询函数 (提交 1a36bc9d) 已撤回 (提交 2f2b18bd)
      • JSON_EXISTS()
      • JSON_QUERY()
      • JSON_VALUE()
  • NUMERIC
    • 比例可以为负数或大于精度 (提交 085f931f)
  • xid
    • 添加了对 MIN()MAX() 聚合的支持 (提交 400fc6b6)

分区更改

SQL 更改

一般

  • 通过 UNIQUE [ NULLS [ NOT ] DISTINCT ] 选项配置 UNIQUE 约束中 NULL 值的相等性(提交 94aa7cc5
  • IS JSON 谓词已添加(提交 33a37760 已撤回(提交 2f2b18bd
  • 已添加以下符合 SQL 标准的 JSON 函数(提交 606948b049082c2c 已撤回(提交 2f2b18bd
    • JSON()
    • JSON_SCALAR()
    • JSON_SERIALIZE()

添加

修改

  • ALTER DATABASE
    • 已添加 REFRESH COLLATION VERSION 语法(提交 37851a8b
  • ALTER PUBLICATION
    • 已添加 FOR ALL TABLES IN SCHEMA 语法(提交 5a283246
    • 已添加 [ ADD | SET | DROP ] TABLE ... ( column_name [, ... ] ) 语法(提交 923def9a
  • ALTER SEQUENCE
    • 已添加 SET [ LOGGED | UNLOGGED ] 语法(提交 344d62fb
  • ALTER SUBSCRIPTION
    • 已添加 ALTER SUBSCRIPTION ... SKIP 语法(提交 208c5d65
    • 已添加参数 disable_on_error (提交 705e20f8
    • 现在,如果目标 发布 不存在于 ALTER SUBSCRIPTION ... SET PUBLICATION ... 上,则会发出一个 WARNING (提交 8f2e2bbf
  • ALTER TABLE
    • 已添加 ALTER TABLE ... SET ACCESS METHOD 语法(提交 b0483263
    • 外键 ON DELETE SET ... 操作可以提供一个明确的列列表(提交 d6f96ed9
    • 已添加 UNIQUE [ NULLS [ NOT ] DISTINCT ] 语法(提交 94aa7cc5
  • ALTER VIEW
    • 已添加选项 security_invoker (提交 7faa5fc8
  • CLUSTER
  • COPY
    • HEADER 选项现在可用于 FORMAT 选项 text (提交 43f33dc0
    • 已添加用于 COPY FROM 的选项 HEADER MATCH (提交 072132f0
  • CREATE DATABASE
    • 已添加选项 COLLATION_VERSION (提交 37851a8b
    • 已添加选项 ICU_LOCALE (提交 f2553d43
    • 已添加选项 LOCALE_PROVIDER (提交 f2553d43
    • 已添加选项 STRATEGY (提交 9c08aea6
    • 已添加选项 OID (提交 aa010514
  • CREATE INDEX
    • 已添加 UNIQUE [ NULLS [ NOT ] DISTINCT ] 语法(提交 94aa7cc5
  • CREATE PUBLICATION
    • 已添加 FOR ALL TABLES IN SCHEMA 语法(提交 5a283246
    • 已添加 FOR TABLE ... ( column_name [, ... ] ) 语法(提交 923def9a
  • CREATE SEQUENCE
    • 已添加 CREATE UNLOGGED SEQUENCE 语法(提交 344d62fb
  • CREATE SUBSCRIPTION
    • 已添加参数 two_phase (提交 a8fd13ca
    • 已添加参数 disable_on_error (提交 705e20f8
    • 现在,如果目标 发布 不存在,则会发出一个 WARNING (提交 8f2e2bbf
  • CREATE TABLE
    • 外键 ON DELETE SET ... 操作可以提供一个明确的列列表(提交 d6f96ed9
    • 已添加 UNIQUE [ NULLS [ NOT ] DISTINCT ] 语法(提交 94aa7cc5
  • CREATE VIEW
    • 已添加选项 security_invoker (提交 7faa5fc8
  • EXPLAIN
    • 跟踪临时文件块的 I/O 定时(efb0ef90
  • GRANT
    • 已添加 GRANT { { SET | ALTER SYSTEM } [, ... ] | ALL [ PRIVILEGES ] } ON PARAMETER ... 语法(提交 a0ffa885
  • REVOKE
    • REVOKE [ GRANT OPTION FOR ] { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] } ON PARAMETER ... 语法已添加(提交 a0ffa885
  • SELECT
    • 已添加并行 DISTINCT 支持(提交 22c4e88e
  • SET
    • 当使用前缀设置不存在的设置时,将发出一个 WARNING,该前缀由 扩展 保留(提交 75d22069

系统目录更改

添加

修改

视图

添加

修改

系统函数更改

添加

修改

已移除

配置更改

一般

  • 为显示运行时计算的 GUC 添加 GUC 标志 GUC_RUNTIME_COMPUTED (提交 0c39c292)

添加

修改

已移除

用户/角色

过程语言更改

PL/Perl

  • 现在最低要求版本为 Perl 5.8.3 (提交 92e6a98c)

PL/pgSQL

  • 变量 CONSTANT 标记的强制执行得到改进 (提交 ccd10a9b)

PL/Python

  • 删除对 Python 2 的支持 (初始提交 19252e8e)

PL/Sample

  • 添加触发器处理程序示例 (提交 2f4d0d67)

 

复制更改

复制协议

  • 使用更灵活的语法修改 BASE_BACKUP 命令 (提交 0ba281cb)
    • PROGRESS [ boolean ] (之前不接受布尔值)
    • CHECKPOINT { 'fast' | 'spread' } (取代之前的 FAST 选项)
    • WAL [ boolean ] (之前不接受布尔值)
    • WAIT [ boolean ] (取代之前的 WAIT 选项)
    • TABLESPACE_MAP [ boolean ] (之前不接受布尔值)
    • VERIFY_CHECKSUMS [ boolean ] (取代之前的 NOVERIFY_CHECKSUMS 选项)
  • CREATE_REPLICATION_SLOT 中添加 TWO_PHASE 选项 (提交 cda03cfe)
  • 使用更灵活的语法修改 BASE_BACKUP 命令 (提交 0ba281cb)
  • IDENTIFY_SYSTEM 不再需要在 START_REPLICATION 之前执行 (提交 8e7811e9)

逻辑复制

libpq 更改

  •  添加对服务器主题备用名称中的 IPv4 和 IPv6 地址的支持 (提交 c1932e54)
  • PQcancel() 现在使用 PGconntcp_user_timeouttcp_keepalives_{count|idle|interval} 设置 (提交 5987feb7)
  • PQsslAttribute(NULL, "library") 返回正在使用的 SSL 库的名称,无需连接句柄(提交 ebc8b7d4)。

核心实用程序

  • createdb
    • 添加了 --icu-locale 选项(提交 f2553d43)。
    • 添加了 --locale-provider 选项(提交 f2553d43)。
    • 添加了 --strategy 选项(提交 9c08aea6)。
  • pg_basebackup
    • 实现了新的 COPY 子协议(提交 cc333f32)。
    • 添加了选项 -t/--target(提交 3500ccc3)。
    • 选项 --compress 扩展为接受压缩方法和可选的压缩级别(提交 5c649fe1)。
    • 选项 --compress 可以接受 client-gzipserver-gzip 以及 gzip(提交 0ad80329)。
    • 选项 --compress 可以接受 lz4server-lz4(提交 dab29847)。
    • 选项 --compress 可以接受 client-lz4(提交 751b8d23)。
    • 选项 --compress 可以接受 zstdclient-zstdserver-zstd(提交 7cf085f0)。
    • 选项 --compress 可以接受 (client|server)-zstd:workers=N 以使用多个 zstd 工作器提供并行备份(提交 51c0d186)。
  • pgbench
    • 使用 COPY FREEZE 来更快地填充基准表(提交 06ba4a63)。
    • 添加了以下选项(提交 4a39f87a)。
      • --max-tries
      • --failures-detailed
      • --verbose-errors
  • pg_dump
  • pg_dumpall
    • 添加了选项 --no-table-access-method(提交 21586288)。
    • 删除了对从早于 PostgreSQL 9.2 的版本转储的支持(提交 30e7c175)。
  • pg_receivewal
    • 选项 --compression 扩展为支持 method[:detail] 语法(提交 d62bcc8b042a923a)。
    • 添加了对 LZ4 压缩的支持(提交 babbbb59)。
    • 现在可以从槽的重新启动 LSN 流式传输(提交 f61e1dd2)。
  • pg_recvlogical
    • 添加了选项 --two-phase(提交 cda03cfe)。
  • pg_restore
    • 添加了选项 --no-table-access-method(提交 21586288)。

服务器实用程序

  • initdb
    • 添加了选项 --icu-locale(提交 f2553d43)。
    • 添加了选项 --locale-provider(提交 f2553d43)。
  • pg_resetwal
    • 添加了选项 -u/--oldest-transaction-id(提交 74cf7d46)。
  • pg_rewind
    • 添加了选项 --config-file(提交 0d5c3875)。
  • pg_upgrade
    • 添加了选项 -N/--no-sync(提交 3d5ffccb)。
    • 文件节点表空间 OID 保留(提交 9a974cbc)。
    • postgres 和 template0 数据库 OID 保留(提交 aa010514)。
    • pg_upgrade 生成的文件现在将存储在升级后的集群的数据目录下的 pg_upgrade_output.d 中(提交 38bfae36)。
    • 现在将列出所有无法连接的数据库(提交 26ebb0e2)。
    • 如果输出不是 tty,则不会发出进度状态(提交 27b02e07)。
    • 删除了对从早于 PostgreSQL 9.2 的版本升级的支持(提交 e469f0aa)。
  • pg_waldump
    • 选项 --rmgr 可以多次指定(提交 c8bf5098)。
    • 选项 --block 的短选项已从 -k 更改为 -B(提交 52b55684)。
    • 选项 --relation 的短选项已从 -l 更改为 -R(提交 52b55684)。
    • 选项 --fork 现在接受 分叉 名称,而不是分叉号(提交 52b55684)。
    • 在收到 SIGINT 时现在会发出统计摘要(提交 f2c52eeb)。
    • 添加了按 RelFileNodeBlockNumberForkNumFPW 过滤的功能(提交 127aea2a)。

psql

  • 新的环境变量 PSQL_WATCH_PAGER 用于为 psql\watch 命令设置分页器(提交 7c09d279)。
  • \getenv 斜杠命令 添加(提交 33d3eead)。
  • \lo_list/\dl 现在显示 大型对象 的 ACL,前提是提供了 + 选项(提交 328dfbda)。
  • 删除了对早于 PostgreSQL 9.2 的版本的支持(提交 cf0cab86)。
  • 默认情况下会显示多个查询的结果;添加了变量 SHOW_ALL_RESULTS 来控制此行为(提交 7844c991)。
  • \copy 的性能得到提升(提交 eec57115)。
  • 添加了 \dconfig 斜杠命令(提交 3e707fbb)。

Contrib 模块

添加

修改

  • amcheck
    • verify_heapam() 现在支持序列(提交 c3b011d9)。
    • 其他 TOAST 指针检查(提交 bd807be6)。
  • btree_gist
    • 添加了 bool opclass 以允许在 boolean 列上创建 GiST 索引(提交 57e3c516)。
  • pgcrypto
    • 现在只有在配置了 OpenSSL 支持的情况下才构建(提交 db7d1a7b)。
  • postgres_fdw
    • 添加了对并行提交的支持(提交 04e706d4)。
    • CASE 表达式可以被推送到远程服务器(提交 5d44fff0)。
    • 远程连接的 application_name 可以通过 GUC postgres_fdw.application_name 设置(提交 449ab635)。
    • postgres_fdw.application_name 可以包含某些转义序列(提交 6e0cb3de94c49d53)。
    • 在检索查询结果时发生超时到期时报告警告(提交 815d61fc)。
  • pg_stat_statements
    • 添加了列 temp_blk_read_timetemp_blk_write_time 到视图 pg_stat_statements 中,用于跟踪临时文件块的 I/O 定时(提交 76cbf7ed)。
    • 添加了 JIT 计数器(提交 57d6aea0)。
  • sepgsql
    • 现在在日志消息中包含了许可/强制状态(提交 134d9746)。
  • test_decoding
    • 添加了选项 include-sequences(提交 80901b32
  • xml2
    • 删除了函数 xml_is_well_formed()(提交 fd2abeb7

测试更改

TAP 测试

  • PostgresNodeTestLib Perl 模块移至自定义命名空间 PostgreSQL::Testb3b4d8e6

其他

  • 添加了对通过 cirrus-ci 进行 GitHub 仓库持续集成的支持(提交 93d97349

CommitFests

以下是针对 PostgreSQL 15 代码提交的 CommitFest

  • CommitFest 37(2022 年 3 月 1 日至 2022 年 3 月 31 日;已关闭)
  • CommitFest 36(2022 年 1 月 1 日至 2022 年 1 月 31 日;已关闭)
  • CommitFest 35(2021 年 11 月 1 日至 2021 年 11 月 30 日;已关闭)
  • CommitFest 34(2021 年 9 月 1 日至 2021 年 9 月 30 日;已关闭)
  • CommitFest 33(2021 年 7 月 1 日至 2021 年 7 月 31 日;已关闭)

请注意,三月份的 CommitFest 通常会在官方截止日期之后持续几天,直到宣布功能冻结,通常在四月的早期。

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

标记 PostgreSQL 15 开发开始的初始提交是 596b5af1(2021 年 6 月 28 日)。