PostgreSQL 15

次要版本发布

后端更改

常规

源代码配置

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

ABI

  • PostgreSQL 派生版本现在可以明确声明其 ABI 不兼容(提交 d6d1dfcc

备份

执行器

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

钩子

添加

修改

日志记录

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

权限

计划器

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

postmaster

  • 选项 --forkboot 重命名为 --forkaux(提交 50017f77
  • CREATEpublic 模式上的权限现在默认总是从 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 标准构造函数(提交 f79b803df4fb45d1): 已撤回(提交 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

逻辑复制

  • 添加了对预备事务的支持(提交 a8fd13ca
  • 添加了对流式预备事务的支持(提交 63cf61cd
  • 添加了对发布模式下所有表的支持(提交 5a283246
  • 添加了对行过滤器的支持(提交 52e4f0cd
  • 订阅可以选择在错误时禁用(提交 705e20f8
  • 添加了对指定单个表列的支持(提交 923def9a
  • GUCs 影响的值的一致逻辑复制 DateStyleIntervalStyleextra_float_digits 被强制执行(提交 f3d4019d
  • 添加了对序列逻辑解码的支持(提交 0da92dc5 通过提交 2c7ea57e 撤回)

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
  • 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
    • 保留了 filenodetablespace 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 操作类,允许在 boolean 列上创建 GiST 索引(提交 57e3c516
  • pgcrypto
    • 现在仅在配置了 OpenSSL 支持时构建(提交 db7d1a7b
  • postgres_fdw
    • 添加了对并行提交的支持(提交 04e706d4
    • CASE 表达式可以推送到远程服务器(提交 5d44fff0
    • 可以通过 GUC postgres_fdw.application_name 设置远程连接的 application_name(提交 449ab635
    • postgres_fdw.application_name 可以包含某些转义序列(提交 6e0cb3de94c49d53
    • 在检索查询结果时发生超时过期时报告警告(提交 815d61fc
  • pg_stat_statements
    • 在视图 pg_stat_statements 中添加了列 temp_blk_read_timetemp_blk_write_time,用于跟踪临时文件块的 I/O 定时(提交 76cbf7ed
    • 添加了 JIT 计数器(提交 57d6aea0
  • sepgsql
    • 日志消息中现在包含了宽松/强制状态(提交 134d9746
  • test_decoding
    • 添加了选项 include-sequences(提交 80901b32
  • xml2
    • 删除了函数 xml_is_well_formed()(提交 fd2abeb7

测试更改

TAP 测试

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

其他

  • 添加了通过 cirrus-ci 对 github 存储库进行持续集成支持(提交 93d97349

CommitFests

以下 提交节 用于 PostgreSQL 15 代码提交

请注意,三月份的提交节通常会在官方结束日期之后开放几天,直到功能冻结宣布,通常在四月的月初。

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

PostgreSQL 15 开发开始的初始提交是 596b5af1(2021-06-28)。