PostgreSQL 18

PostgreSQL 18 是当前的 PostgreSQL 开发版本,计划于 2025 年底发布。

源代码和构建更改

配置

  • 移除了对 OpenSSL 版本低于 1.1.1 的支持 (提交 a70e01d46c66b744)

后端更改

扩展

  • 可加载模块可以通过 PG_MODULE_MAGIC_EXT 宏报告名称和版本信息 (提交 9324c8c5)

钩子

  • 添加了 explain_per_node_hook (提交 4fd02bf7)
  • 添加了 explain_per_plan_hook (提交 4fd02bf7)
  • 添加了 explain_validate_options_hook (提交 50ba65e7)

优化器

  • DISTINCT 键可以重新排序以匹配输入路径的路径键 (提交 a8ccf4e9)
  • 当适当的时候,x IN (VALUES ...) 会被转换为 x = ANY ... (提交 c0962a11)

规划器

  • 现在可以使用唯一索引检测冗余的 GROUP BY 列 (提交 bd10ec52)
  • 实现了自连接消除 (SJE) (提交 fc069a3a)
  • 通过初始剪枝而被剪枝的分区不再被锁定 (提交 525392d5) 已恢复 (提交 1722d5eb)
  • SQL 语言函数现在使用计划缓存 (提交 0dca5d68)

存储

  • 添加了 异步 I/O 支持 (初始提交 da722699)

数据类型更改

bytea

  • 添加了对 minmax 聚合函数 的支持 (提交 2d24fd94)
  • 添加了对转换为 integer 类型以及从 integer 类型转换的支持 (提交 6da469ba)

SQL 更改

通用

已修改

分区 更改

索引更改

通用

  • 为范围类型添加了 GiST 和 B-tree 排序支持例程 (提交 e9e7b660)
  • 添加了 B-tree 跳过扫描优化 (提交 92fe23d9)

索引访问方法接口

  • 添加了 amgettreeheight 索引 AM API 例程 (提交 56fead44)

系统目录更改

已修改

视图

已添加

已修改

系统函数更改

已添加

已修改

配置更改

已添加

已修改

移除

Vacuum 更改

  • 立即扫描所有可见页面以分摊积极的 VACUUM (提交 052026c9)
  • 对插入密集型表的 autovacuums 更频繁 (提交 06eae9e6)

日志记录更改

用户/角色

认证更改

  • 弃用了 MD5 密码 (提交 db6a4a98)
  • 添加了对 OAUTHBEARER SASL 机制的支持 (提交 b3f0be78)

过程语言更改

PL/pgSQL

  • 修改为使用纯解析器和可重入扫描器 (提交 7b27f5fd)
  • 支持命名游标参数的 => 语法 (提交 246dedc5)

PL/Python

  • 激活了 Python "Limited API" (提交 0793ab81)

PL/Tcl

  • 添加了对 Tcl 9 的支持 (提交 32a2aa77)

libpq 更改

  • 添加了函数 PQfullProtocolVersion() (提交 cdb6b0fd)
  • 弃用了类型 pg_int64 (提交 3c86223c)
  • 添加了连接参数 min_protocol_versionmax_protocol_version (提交 285613c6)
  • 添加了连接参数 sslkeylogfile (提交 2da74d8d)
  • 添加了连接参数 oauth_issuer, oauth_client_id, oauth_client_secretoauth_scope (提交 b3f0be78)
  • 添加了函数 PQservice() (commit 4b99fed7) 已恢复 (commit fef6da9e)

复制更改

  • 非活动复制槽现在可以通过超时进行停用 (提交 ac0e3313)

逻辑复制 (Logical replication)

核心实用程序

服务器实用程序

  • initdb
    • 添加了选项 --no-data-checksums (提交 983a588e)
    • 默认启用了数据校验和 (提交 04bec894)
    • 添加了选项 --no-sync-data-files (提交 cf131fa9)
  • pg_upgrade
    • 添加了任务并行化框架 (提交 40e2e5e9)
    • 添加了传输统计信息的支持 (提交 1fd1bd87)
    • 添加了选项 --swap (提交 626d7236)

psql 更改

  • psql 中添加了以下支持扩展协议使用的命令 (提交 d55322b0)
    • \parse
    • \bind_named
    • \close_prepared (最初为 \close,但在提交 fc39b286 中重命名)
  • 添加了变量 SERVICE 和提示配置选项 %s,提供有关可用 服务 名称的信息 (提交 477728b5)
  • 可以通过在列表命令后附加 x 来强制扩展模式 (提交 00f4c295)
  • \df+, \do+, \dAo+, 和 \dC+ 命令的输出中添加了 leakproof 指示符 (提交 2355e511)
  • 添加了对管道的支持 (提交 41625ab8)
  • 扩展了 \conninfo 的输出 (提交 bba2fbc6)
  • 添加了管道状态提示配置选项 %P 和状态变量 PIPELINE_SYNC_COUNT, PIPELINE_COMMAND_COUNTPIPELINE_RESULT_COUNT (提交 3ce35758)
  • 添加了命令 \sendpipeline (提交 17caf664)
  • \dx 现在显示默认扩展版本 (提交 d696406a)
  • \watch 的默认间隔现在可以配置 (提交 1a759c83)

Contrib模块

已添加

已修改

  • amcheck
    • 添加了函数 gin_index_check() (提交 14ffaece)
  • btree_gist
    • 添加了对排序 GiST 索引构建的支持 (提交 e4309f73)
    • 添加了 stratnum GiST 支持函数 (提交 7406ab62)
  • citext
    • 转换为使用 SQL 标准函数体 (提交 97a5a168)
    • regexp_...() 函数添加了参数名称 (提交 580f8727)
  • cube
    • 修改为使用纯解析器和可重入扫描器 (提交 802fe923)
  • dblink
    • 添加了 SCRAM 身份验证直通支持 (提交 3642df26)
  • earthdistance
    • 转换为使用 SQL 标准函数体 (提交 969bbd0f)
  • file_fdw
    • 添加了选项 on_errorlog_verbosity (提交 a1c4c8a9)
    • 添加了选项 reject_limit (提交 6c8f6703)
  • intarray
    • 特化了 qsort 函数,以更好地支持非常大的整数数组 (提交 53d3daa4)
  • isn
    • 添加了 GUC isn.weak,替换了 isn_weak() 函数 (提交 44890442)
  • lo
    • 函数定义转换为使用 SQL 标准函数体 (提交 13e3796c)
  • pageinspect
    • 转换为使用 SQL 标准函数体 (提交 68ff25ee)
  • passwordcheck
    • 添加了 GUC passwordcheck.min_password_length 以启用指定最小密码长度 (提交 f7e1b382)
  • pg_buffercache
    • 添加了视图 pg_buffercache_numa (提交 ba2a3c23)
    • 添加了函数 pg_buffercache_evict_relation()pg_buffercache_evict_all() (提交 dcf7e169)
  • pgcrypto
    • 添加了函数 fips_mode() (提交 924d89a3)
    • 添加了 GUC pgcrypto.builtin_crypto_enabled (提交 035f99cb)
    • 添加了对 AES 加密中 CFB 模式的支持 (提交 9ad1b3d0)
  • pg_freespacemap
    • 函数定义转换为使用 SQL 标准函数体 (提交 3f323eba)
  • pg_stat_statements
    • SET 语句的值现在显示为常量 (提交 dc685159)
    • 添加了以下列以跟踪并行工作者活动 (提交 cf54a2c0)
      • parallel_workers_to_launch
      • parallel_workers_launched
    • 添加了列 wal_buffers_full (提交 ce5bcc4a)
  • pg_visibility
    • 通过使用读取流优化了性能 (提交 65c310b3)
  • postgres_fdw
    • closed 添加到 postgres_fdw_get_connections() 的输出中 (提交 857df3ce)
    • used_in_xact 添加到 postgres_fdw_get_connections() 的输出中 (提交 c297a47c)
    • user_name 添加到 postgres_fdw_get_connections() 的输出中 (提交 4f08ab55)
    • remote_backend_pid 添加到 postgres_fdw_get_connections() 的输出中 (提交 fe186bda)
    • 可以使用新的选项 use_scram_passthroughSCRAM 身份验证传递给远程服务器 (提交 761c7950)
  • seg
    • 修改为使用纯解析器和可重入扫描器 (提交 1f0de66e)
  • xml2
    • 转换为使用 SQL 标准函数体 (提交 667368fd)

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

标志着 PostgreSQL 18 开发开始的初始提交是 e26810d0 (2024-07-01)。

CommitFests

PostgreSQL 18 开发周期中举行的 CommitFests 如下: