PostgreSQL 17

PostgreSQL 17 是最新的 PostgreSQL 主要版本,于 2024 年 9 月发布。

次要版本发布

主要特性

  • 支持增量备份 (初始提交 dc212340)
  • 逻辑复制的故障转移控制

源代码和构建更改

配置

  • 添加了配置选项 --enable-injection-points (提交 d86d20f0)
  • 移除了配置选项 --disable-thread-safety (提交 68a4b58e)

源代码

  • 等待事件相关的代码和文档自动生成 (提交 fa889284)

平台支持

  • 移除了对 AIX 的支持 (提交 0b16bb87)

后端更改

通用

  • 启动数据包中的数据库和用户名不再截断 (提交 562bee0f) 兼容性更改
  • 添加了 WAL 汇总进程 (提交 174c4805)
  • 添加了内部 TIDStore 功能,用于存储大量的 TID (初始提交 30e14428)

后台工作进程

  • bgw_library_name 的长度从 96 增加到 1024 字节 (提交 95784578)

字符集和排序规则

  • 添加了排序规则提供程序 "builtin" (提交 2d819a08)

事件触发器

优化器

  • 现在可以移除冗余的自连接 (提交 d3d55ce5) 已撤销 (提交 d3d55ce5)

WAL

  • 优化了 WAL 插入锁的获取和释放 (提交 71e4cc6b)

数据类型更改

interval

  • 添加了对 +infinity/-infinity 的支持 (提交 519fc1bd)

JSON

  • 添加了以下符合 SQL 标准的 JSON 函数 (提交 03734a7f)
    • JSON()
    • JSON_SCALAR()
    • JSON_SERIALIZE()
  • 添加了以下符合 SQL 标准的 JSON 查询函数 (提交 6185c973)
    • JSON_EXISTS()
    • JSON_QUERY()
    • JSON_VALUE()
  • 添加了 JSON_TABLE() 构造函数 (提交 de360045)

XML

  • 添加了解析大于 10MB 的 XML 文档的支持 (2197d062) 已撤销 (提交 f2743a7d)

SQL 更改

  • 添加了对命名 NOT NULL 约束的支持 (提交 b0e96f31)
  • 添加了对时间 PRIMARY KEYUNIQUE 约束的支持 (提交 46a0cd4c) 已撤销 (提交 8aee330a)
  • 添加了对时间 FOREIGN KEY 约束的支持 (提交 34768ee3) 已撤销 (提交 8aee330a)

已修改

  • ALTER OPERATOR
    • 现在可以设置 COMMUTATORNEGATORMERGESHASHES 属性 (提交 2b5154be)
  • ALTER STATISTICS
    • 添加了 ALTER STATISTICS ... SET STATISTICS DEFAULT 语法 (提交 4f622503)
  • ALTER SUBSCRIPTION
    • 添加了参数 failover (提交 776621a5)
  • ALTER SYSTEM
    • 现在可以设置未识别的自定义 GUCs (提交 2d870b4a)
  • ALTER TABLE
    • 添加了 CONSTRAINT ... NOT NULL ... 语法 (提交 b0e96f31)
    • 添加了 ALTER TABLE ... SET EXPRESSION AS ... 语法 (提交 5d06e99a)
    • 添加了 ALTER TABLE ... SET STATISTICS DEFAULT 语法 (提交 4f622503)
    • 添加了 ALTER TABLE ... SET ACCESS METHOD DEFAULT 语法 (提交 d61a6cad)
    • 添加了 ALTER TABLE ... MERGE PARTITIONS ... 语法 (提交 1adf16b8) 已撤销 (提交 3890d90c)
    • 添加了 ALTER TABLE ... SPLIT PARTITION ... 语法 (提交 87c21bb9) 已撤销 (提交 3890d90c)
  • COPY
    • COPY FROM 添加了 FORCE_NULL *FORCE_NOT_NULL * 选项 (提交 f6d4c9cf)
    • COPY FROM 添加了 ON_ERROR 选项 (初始提交 9e2d8701, 在提交 b725b7ee 中重命名为 SAVE_ERROR_TO)
    • 添加了 LOG_VERBOSITY 选项 (提交 f5a22789)
  • CREATE SUBSCRIPTION
    • 添加了参数 failover (提交 776621a5)
  • CREATE TABLE
    • 添加了 CONSTRAINT ... NOT NULL ... 语法 (提交 b0e96f31)
    • 添加了 UNIQUE ... WITHOUT OVERLAPSPRIMARY KEY ... WITHOUT OVERLAPS 语法 (提交 46a0cd4c) 已撤销 (提交 8aee330a)
    • 对于 分区表,可以使用 CREATE TABLE ... USING 指定访问方法 (提交 374c7a22)
  • EXPLAIN
    • 添加了 MEMORY 选项 (提交 5de890e3)
    • 添加了 SERIALIZE 选项 (提交 06286709)
  • GRANT
    • 添加了 MAINTAIN 权限 (提交 ecb0fd33)
  • MERGE
    • 目标关系可以是可更新视图 (提交 5f2e179b)
    • 添加了 MERGE ... RETURNING ... 支持 (提交 c649fa24)
    • 添加了 MERGE ... WHEN NOT MATCHED BY SOURCE 支持 (提交 0294df2f)

分区更改

  • 允许在分区上使用某些类型的排除约束 (提交 8c852ba9)
  • 为分区表添加了对标识列的支持 (提交 69958631)
  • 可以为分区表定义访问方法 (提交 374c7a22)

索引更改

BRIN

GiST

  • 添加了对增量排序的支持 (提交 625d5b3c)

SP-GiST

  • 添加了对增量排序的支持 (提交 625d5b3c)

系统目录更改

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

配置更改

已添加

已修改

移除

用户/角色

认证更改

  • 移除了对 OpenSSL 1.0.1 的支持 (提交 8e278b65)

过程语言更改

PL/pgSQL

  • 现在 %TYPE%ROWTYPE 后面可以跟数组修饰符 (提交 5e8674dc)

libpq 更改

  • 添加了用于关闭 portal 和 statement 的函数 (提交 28b57265)
  • 添加了函数 PQchangePassword() (提交 a7be2a6c)
  • 添加了函数 PQsendPipelineSync() (提交 4794c2d3)
  • 添加了各种非阻塞查询取消函数 (提交 61461a30)
  • 添加了函数 PQsocketPoll() (提交 f5e4dedf)
  • 添加了函数 PQsetChunkedRowsMod() (提交 4643a2b2)
  • 添加了连接参数 sslnegotiation (提交 d39a49c1)

信息模式更改

  • element_types 视图中移除了 domain_default 列 (提交 78806a95)

复制更改

复制协议

  • 添加了命令 ALTER_REPLICATION_SLOT (提交 73292404)
  • 在命令 CREATE_REPLICATION_SLOT 中添加了选项 FAILOVER (提交 73292404)

逻辑复制 (Logical replication)

  • 现在二进制升级可以保留订阅的完整状态 (提交 9a17be1e)

核心实用程序

已添加

已修改

  • clusterdb
    • 选项 -a/--all 可以与选项 -t/--table 结合使用 (提交 1b49d56d)
  • createdb
    • 选项 --locale-provider 接受附加值 builtin (提交 2d819a08)
  • pg_amcheck
    • 添加了选项 --checkunique (提交 5ae20872)
  • pg_archivecleanup
    • 以下选项已扩展长格式 (提交 dd7c60f1)
      • -d/--debug
      • -n/--dry-run
      • -x/--strip-extension
    • 添加了选项 --clean-backup-history (提交 3f8c98d0)
  • pg_basebackup
    • 添加了选项 --sync-method(提交 8c16ad3b
    • 在提供的 conninfo 字符串中允许使用 dbname(提交 cca97ce6
    • 添加了选项 -i/--incremental (提交 dc212340)
    • 现在可以通过选项 -R/--write-recovery-confconninfo 字符串中写入 dbname (提交 a145f424)
  • pgbench
    • 对于所有客户端数据生成,使用了 COPY (提交 e35cc3b3)
    • 添加了选项 --exit-on-abort (提交 3c662643)
    • 添加了元命令 \syncpipeline (提交 94edfe25)
    • 选项 -d 作为 --debug 的简写被 -d/--database 选项替换 (提交 3ff01b2b)
  • pg_dump
    • 添加了选项 --sync-method(提交 8c16ad3b
    • 添加了选项 --filter (提交 a5cf808b)
    • 添加了选项 --exclude-extension (提交 522ed12f)
  • pg_dumpall
    • 添加了选项 --filter (提交 a5cf808b)
  • pg_receivewal
  • pg_restore
    • 并行恢复和大量表的操作性能得到改善 (提交 9bfd44bb)
    • 添加了选项 --filter (提交 a5cf808b)
    • 添加了选项 --transaction-size (提交 959b38d7)
  • reindexdb
    • 选项 --all 可与 --table--schema--index--system 结合使用 (提交 24c928ad)
    • 选项 --system 可与 --table--schema--index 结合使用 (提交 24c928ad)
    • 选项 --jobs 可与 --index 结合使用 (提交 47f99a40)
  • vacuumdb
    • 选项 -a/--all 现在可与 --table--schema--exclude-schema 结合使用 (提交 648928c7)

服务器实用程序

psql 更改

  • 添加了命令 \drg (提交 d65ddaca)
  • \watch 命令添加了参数 min_rows (提交 f347ec76)
  • 改进了默认和空权限的显示 (提交 d1379ebf)
  • 数据库重新连接现在可以通过 SIGINT 取消 (提交 cafe1056)

Contrib模块

已修改

移除

 

测试

  • 为注入点添加了后台支持 (初始提交 d86d20f0)

pg_regress

  • 在环境变量 PG_TEST_INITDB_EXTRA_OPTS 中设置的选项将传递给 initdb (提交 995d400c)

TAP 测试

  • 在环境变量 PG_TEST_INITDB_EXTRA_OPTS 中设置的选项将传递给 initdb (提交 995d400c)

测试模块

已修改

移除

其他

  • \v 在各种解析器中现在被视为空白字符 (提交 ae6d06f0)

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

标志着 PostgreSQL 17 开发开始的初始提交是 5bcc7e6d (2023-06-29)。

CommitFests

 

  •