PostgreSQL 15

次要版本发布

后端更改

通用

源配置

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

ABI

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

备份

执行器

钩子

已添加

已修改

日志记录

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

权限

规划器

postmaster

  • 选项 --forkboot 重命名为 --forkaux (提交 50017f77)
  • 默认情况下,CREATEpublic 模式的权限现在总是被撤销,并且现在由 pg_database_owner 角色拥有 (提交 b073c3cc)
  • 选项 -C 现在显示运行时计算的 GUCs (提交 0c39c292)

序列

  • 添加了未记录的序列 (提交 344d62fb)

统计收集器

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

vacuum

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

WAL

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

数据类型更改

通用

  • 添加了用于“内部使用”类型的("internal use" types)新类型类别 (提交 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
    • 标度(scale)可以是负数或大于精度(precision)(提交 085f931f)
  • xid
    • 添加了对 MIN()MAX() 聚合函数(aggregates)的支持 (提交 400fc6b6)

分区更改

  • 外键触发器(foreign key triggers)现在也为 分区表 及其分区创建 (提交 f4566345)

SQL 更改

通用

  • NULL 值在 UNIQUE 约束中的相等性可以通过 UNIQUE [ NULLS [ NOT ] DISTINCT ] 选项进行配置 (提交 94aa7cc5)
  • 添加了 IS JSON 断言 (commit 33a37760) 已撤销 (commit 2f2b18bd)
  • 添加了以下 SQL 标准 JSON 函数 (提交 606948b049082c2c) 已撤销 (提交 2f2b18bd)
    • JSON()
    • JSON_SCALAR()
    • JSON_SERIALIZE()

已添加

已修改

系统目录更改

已添加

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

移除

配置更改

通用

  • 添加了 GUC 标志 GUC_RUNTIME_COMPUTED 用于显示运行时计算的 GUCs (提交 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)
  • 执行 START_REPLICATION 不再需要先执行 IDENTIFY_SYSTEM (提交 8e7811e9)

逻辑复制 (Logical replication)

  • 添加了对预备事务(prepared transactions)的支持 (提交 a8fd13ca)
  • 添加了对流式预备事务(streaming prepared transactions)的支持 (提交 63cf61cd)
  • 支持发布模式下的所有表 (提交 5a283246)
  • 添加了行过滤器(row filters)的支持 (提交 52e4f0cd)
  • 订阅可以根据错误选择性地禁用 (提交 705e20f8)
  • 添加了指定单个表列的支持 (提交 923def9a)
  • 强制对受 GUC DateStyleIntervalStyleextra_float_digits 影响的值进行一致的逻辑复制 (提交 f3d4019d)
  • 添加了对序列(sequences)的逻辑解码支持 (提交 0da92dc5) 在提交 2c7ea57e 中已回滚)

libpq 更改

  •  添加了对服务器主题备用名称(Subject Alternative Names)中 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 可以接受 zstd, client-zstdserver-zstd (提交 7cf085f0)
    • 选项 --compress 可以接受 (client|server)-zstd:workers=N 来提供多线程 zstd worker 的并行备份 (提交 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(restart 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 现在接受 fork 名称,而不是 fork 号码 (提交 52b55684)
    • 在收到 SIGINT 时,现在会发出统计摘要 (提交 f2c52eeb)
    • 添加了按 RelFileNode, BlockNumber, ForkNumFPW 过滤 (提交 127aea2a)

psql

  • 新的环境变量 PSQL_WATCH_PAGER 用于设置 psql\watch 命令的分页器 (提交 7c09d279)
  • 添加了 \getenv 斜杠命令 (提交 33d3eead)
  • \lo_list/\dl 在提供 + 选项时现在显示 大对象 的 ACLs (提交 328dfbda)
  • 移除了对 PostgreSQL 9.2 之前版本(pre-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
    • 添加了对并行提交(parallel commit)的支持 (提交 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 测试

  • Perl 模块 PostgresNodeTestLib 已移至自定义命名空间 PostgreSQL::Test (b3b4d8e6)

其他

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

CommitFests

以下 CommitFests 是为 PostgreSQL 15 的代码提交准备的

请注意,三月的 CommitFest 通常会在官方结束日期后几天保持开放,直到宣布功能冻结(feature freeze),通常在四月初。

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

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