PostgreSQL 18
PostgreSQL 18
是当前的 PostgreSQL 开发版本,计划于 2025 年底发布。
- 发行说明 (源文件)
- 发布日期:2025-09-25
- EOL:2030-11 (估算)
- 文档:PostgreSQL 18 (索引)
- GIT 分支:REL_18_STABLE
源代码和构建更改
配置
后端更改
扩展
- 可加载模块可以通过
PG_MODULE_MAGIC_EXT
宏报告名称和版本信息 (提交 9324c8c5)
钩子
- 添加了
explain_per_node_hook
(提交 4fd02bf7) - 添加了
explain_per_plan_hook
(提交 4fd02bf7) - 添加了
explain_validate_options_hook
(提交 50ba65e7)
优化器
规划器
- 现在可以使用唯一索引检测冗余的
GROUP BY
列 (提交 bd10ec52) - 实现了自连接消除 (SJE) (提交 fc069a3a)
- 通过初始剪枝而被剪枝的分区不再被锁定 (提交 525392d5) 已恢复 (提交 1722d5eb)
- SQL 语言函数现在使用计划缓存 (提交 0dca5d68)
存储
- 添加了
异步 I/O
支持 (初始提交 da722699)
数据类型更改
bytea
SQL 更改
通用
- 添加了对时间性
FOREIGN KEY
约束 的支持 (提交 89f908a6) - 改进了
FOREIGN KEY
排序处理 (提交 9321d2fd) - 添加了对时间性
PRIMARY KEY
和UNIQUE
约束 的支持 (提交 fc0438b4) - 为
CREATE TABLE AS
和DECLARE
的内部查询生成了查询标识符 (提交 6b652e6c) - 添加了对
VIRTUAL
生成列 的支持 (提交 83ea6c54) - 现在可以将
NOT NULL
约束作为NOT VALID
添加 (提交 a379061a)
已修改
ALTER DATABASE
- 在使用
ALTER DATABASE ... SET TABLESPACE ...
时,将使用file_copy_method
中指定的复制文件的方法 (提交 f78ca6f3)
- 在使用
ALTER_DEFAULT_PRIVILEGES
ALTER ROLE
- 默认情况下,如果为角色设置 MD5 加密密码,将发出
WARNING
(提交 db6a4a98)
- 默认情况下,如果为角色设置 MD5 加密密码,将发出
ALTER SUBSCRIPTION
- 添加了参数
two_phase
(提交 1462aad2)
- 添加了参数
ALTER TABLE
ANALYZE
COPY
CREATE DATABASE
- 如果
STRATEGY
选项设置为WAL_LOG
,将使用读取流 (提交 8720a15e) - 如果
STRATEGY
选项设置为FILE_COPY
,将使用file_copy_method
中指定的复制文件的方法 (提交 f78ca6f3)
- 如果
CREATE FOREIGN TABLE
CREATE INDEX
- 为 GIN 索引 添加了
CREATE INDEX CONCURRENTLY ...
支持 (提交 8492feb9) - 如果
autovacuum
设置为off
,表统计信息将不会被更新 (提交 d611f8b1)
- 为 GIN 索引 添加了
CREATE PUBLICATION
- 添加了
publish_generated_columns
选项 (提交 7054186c)
- 添加了
CREATE ROLE
- 默认情况下,如果创建具有 MD5 加密密码的角色,将发出
WARNING
(提交 db6a4a98)
- 默认情况下,如果创建具有 MD5 加密密码的角色,将发出
CREATE SUBSCRIPTION
- 参数
streaming
现在默认为parallel
(提交 1bf1140b)
- 参数
CREATE TABLE
DELETE
- 在
RETURNING
子句中添加了对OLD
/NEW
的支持 (提交 80feb727)
- 在
EXPLAIN
INSERT
- 在
RETURNING
子句中添加了对OLD
/NEW
的支持 (提交 80feb727)
- 在
MERGE
- 在
RETURNING
子句中添加了对OLD
/NEW
的支持 (提交 80feb727)
- 在
SELECT
- 添加了对具有非确定性排序规则的
LIKE
的支持 (提交 85b7efa1)
- 添加了对具有非确定性排序规则的
UPDATE
- 在
RETURNING
子句中添加了对OLD
/NEW
的支持 (提交 80feb727)
- 在
VACUUM
- 添加了
VACUUM ONLY ...
语法 (提交 62ddf7ee) - 在
VERBOSE
模式下,如果启用了track_cost_delay_timing
,还将报告延迟时间 (提交 7720082a) - WAL 使用信息中包含了“
buffers full
”详细信息 (提交 6a8a7ce4)
- 添加了
分区 更改
索引更改
通用
索引访问方法接口
- 添加了
amgettreeheight
索引 AM API 例程 (提交 56fead44)
系统目录更改
表
已修改
pg_attribute
- 移除了列
attcacheoff
(提交 02a8d0c4)
- 移除了列
pg_authid
- 移除了
TOAST
表支持 (提交 6aa44060)
- 移除了
pg_class
- 添加了列
relallfrozen
(提交 99f8f3fb)
- 添加了列
pg_constraint
pg_index
- 为
TOAST
表支持添加了预留 (提交 b52c4fc3)
- 为
pg_publication
- 添加了列
pubgencols
(提交 7054186c)
- 添加了列
pg_replication_origin
- 移除了 TOAST 表,并将列
roname
限制为 512 字节 (提交 16bf24e0)
- 移除了 TOAST 表,并将列
视图
已添加
pg_aios
(提交 60f566b4)pg_shmem_allocations_numa
(提交 8cc139be)
已修改
pg_backend_memory_contexts
pg_replication_origin_create()
node_name
限制为 512 字节 (提交 16bf24e0)
pg_replication_slots
- 添加了列
two_phase_at
(提交 4868c96b)
- 添加了列
pg_stat_all_tables
,pg_stat_sys_tables
,pg_stat_user_tables
- 添加了以下列 (提交 30a6ed0c)
total_vacuum_time
total_autovacuum_time
total_analyze_time
total_autoanalyze_time
- 添加了以下列 (提交 30a6ed0c)
pg_stat_checkpointer
- 添加了列
num_done
(提交 559efce1)
- 添加了列
pg_stat_database
- 添加了以下列 (提交 e7a9496d)
parallel_workers_to_launch
parallel_workers_launched
- 添加了以下列 (提交 e7a9496d)
pg_stat_io
- 添加了以下列 (提交 f92c854c)
read_bytes
write_bytes
- 添加了以下列 (提交 f92c854c)
pg_stat_wal
- 移除了以下列 (提交 2421e9a5)
wal_write
wal_sync
wal_write_time
wal_sync_time
- 移除了以下列 (提交 2421e9a5)
pg_stat_progress_analyze
- 添加了列
delay_time
(提交 bb8dff99)
- 添加了列
pg_stat_progress_vacuum
- 添加了列
delay_time
(提交 bb8dff99)
- 添加了列
pg_stat_subscription_stats
- 添加了以下列 (提交 6c2b5ede)
confl_insert_exists
confl_update_origin_differs
confl_update_exists
confl_update_missing
confl_delete_origin_differs
confl_delete_missing
- 添加了以下列 (提交 6c2b5ede)
系统函数更改
已添加
array_reverse()
(提交 49d6c7d8)array_sort()
(提交 6c12ae09)casefold()
(提交 bfc59920)crc32()
(提交 760162fe)crc32c()
(提交 760162fe)gamma()
(提交 a3b6dfd4)has_largeobject_privilege()
(提交 4eada203)lgamma()
(提交 a3b6dfd4)pg_clear_attribute_stats()
(提交 ce207d2a)pg_clear_relation_stats()
(提交 e839c8ec)pg_get_acl()
(提交 4564f1ce)pg_get_loaded_modules()
(提交 9324c8c5)pg_get_process_memory_contexts()
(commit 042a6629) 已恢复 (提交 fb844b9f)pg_get_sequence_data()
(初始提交 c8b06bb9)pg_ls_summariesdir()
(提交 4e1fad37)pg_numa_available()
(提交 65c298f6)pg_restore_attribute_stats()
(提交 d32d1463)pg_restore_relation_stats()
(提交 d32d1463)pg_set_relation_stats()
(commit e839c8ec) 已恢复 (提交 a5cbdeb9)pg_set_attribute_stats()
(commit ce207d2a) 已恢复 (提交 a5cbdeb9)pg_stat_get_backend_io()
(提交 9aea73fc)pg_stat_reset_backend_stats()
(提交 9aea73fc)pg_stat_get_backend_wal()
(提交 76def4cd)pg_wal_replay_wait()
(commit 3c5db1d6) 已恢复 (提交 3a7ae6b3)pg_wal_replay_wait_status()
(commit e546989a) 已恢复 (提交 3a7ae6b3)uuidv4()
(提交 78c5e141)uuidv7()
(提交 78c5e141)
已修改
json_strip_nulls()
- 添加了参数
strip_in_arrays
(提交 4603903d)
- 添加了参数
jsonb_strip_nulls()
- 添加了参数
strip_in_arrays
(提交 4603903d)
- 添加了参数
lower()
- 性能改进 (提交 27bdec06)
pg_control_init()
- 添加了输出列
default_char_signedness
(提交 44fe30fd)
- 添加了输出列
pg_log_backend_memory_contexts()
- 报告的上下文级别从 0-based 改为 1-based (提交 d9e03864)
position()
- 添加了对非确定性排序规则的支持(提交 329304c9)
regexp_count()
- 添加了对参数名称的支持(提交 580f8727)
regexp_instr()
- 添加了对参数名称的支持(提交 580f8727)
regexp_like()
- 添加了对参数名称的支持(提交 580f8727)
regexp_match()
- 添加了对参数名称的支持(提交 580f8727)
regexp_matches()
- 添加了对参数名称的支持(提交 580f8727)
regexp_replace()
- 添加了对参数名称的支持(提交 580f8727)
regexp_split_to_array()
- 添加了对参数名称的支持(提交 580f8727)
regexp_split_to_table()
- 添加了对参数名称的支持(提交 580f8727)
regexp_substr()
- 添加了对参数名称的支持(提交 580f8727)
replace()
- 添加了对非确定性排序规则的支持(提交 329304c9)
reverse()
split_part()
- 添加了对非确定性排序规则的支持(提交 329304c9)
string_to_array()
- 添加了对非确定性排序规则的支持(提交 329304c9)
string_to_table()
- 添加了对非确定性排序规则的支持(提交 329304c9)
strpos()
- 添加了对非确定性排序规则的支持(提交 329304c9)
to_number()
- 添加了对罗马数字格式的支持 (提交 172e6b3a)
upper()
- 性能改进 (提交 27bdec06)
uuid_extract_timestamp()
- 添加了对
UUID
版本7
的支持 (提交 78c5e141)
- 添加了对
配置更改
已添加
autovacuum_vacuum_max_threshold
(提交 306dc520)autovacuum_worker_slots
(提交 c758119e)enable_distinct_reordering
(提交 a8ccf4e9)enable_self_join_elimination
(提交 fc069a3a)extension_control_path
(提交 4f7f7b03)file_copy_method
(提交 f78ca6f3)idle_replication_slot_timeout
(提交 ac0e3313)io_max_combine_limit
(提交 10f66468)io_method
(提交 da722699)io_workers
(提交 55b454d0)log_lock_failure
(提交 6d376c3b)max_active_replication_origins
(提交 04ff636c)md5_password_warnings
(提交 db6a4a98)num_os_semaphores
(提交 0dcaea56)oauth_validator_libraries
(提交 b3f0be78)restrict_nonsystem_relation_kind
(提交 66e94448; 向后移植到 PostgreSQL 12)ssl_groups
(提交 3d1ef3a1, 替换ssl_ecdh_curve
)ssl_tls13_ciphers
(提交 45188c2e)query_id_squash_values
(commit 62d712ec) 已恢复 (提交 9fbd53de)track_cost_delay_timing
(提交 bb8dff99)vacuum_max_eager_freeze_failure_rate
(提交 052026c9)vacuum_truncate
(提交 0164a0f9)
已修改
autovacuum_max_workers
- 现在可以在没有服务器重启的情况下更改 (提交 c758119e)
effective_io_concurrency
- 默认值更改为
16
(提交 ff79b5b2)
- 默认值更改为
io_combine_limit
- 最大范围扩展到
1MB
/128
块 (提交 06fb5612)
- 最大范围扩展到
log_connections
log_line_prefix
- 在
COPY FROM
的 CSV 模式下,\.
不再被视为 EOF 标记 (提交 77023374)
- 在
log_rotation_size
- 最大值更改为
2TB
(提交 d4c3a6b8)
- 最大值更改为
maintenance_io_concurrency
- 默认值更改为 16 (提交 cc6be07e)
max_files_per_process
- 重新定义以控制额外打开的文件 (提交 adb5f85f)
search_path
- 标记为
GUC_REPORT
(提交 28a1121f)
- 标记为
track_wal_io_timing
- 累积信息现在可以通过
pg_stat_io
和pg_stat_get_backend_io()
获取 (提交 6c349d83)
- 累积信息现在可以通过
移除
ssl_ecdh_curve
- 被
ssl_groups
替换 (提交 3d1ef3a1)
- 被
Vacuum 更改
日志记录更改
- 如果启用了
track_cost_delay_timing
,则现在会记录VACUUM
/ANALYZE
的延迟时间 (提交 7720082a)
用户/角色
认证更改
过程语言更改
PL/pgSQL
PL/Python
- 激活了 Python "Limited API" (提交 0793ab81)
PL/Tcl
- 添加了对 Tcl 9 的支持 (提交 32a2aa77)
libpq 更改
- 添加了函数
PQfullProtocolVersion()
(提交 cdb6b0fd) - 弃用了类型
pg_int64
(提交 3c86223c) - 添加了连接参数
min_protocol_version
和max_protocol_version
(提交 285613c6) - 添加了连接参数
sslkeylogfile
(提交 2da74d8d) - 添加了连接参数
oauth_issuer
,oauth_client_id
,oauth_client_secret
和oauth_scope
(提交 b3f0be78) - 添加了函数
PQservice()
(commit 4b99fed7) 已恢复 (commit fef6da9e)
复制更改
- 非活动复制槽现在可以通过超时进行停用 (提交 ac0e3313)
逻辑复制 (Logical replication)
- 生成列 现在可以被复制 (提交 745217a0 和 7054186c)
- 将跳过已中止事务的逻辑解码 (提交 072ee847)
- 添加了新的冲突类型
multiple_unique_conflicts
(提交 73eba500)
核心实用程序
pgbench
pg_combinebackup
- 添加了选项
-k
/--link
(提交 99aeb847)
- 添加了选项
pg_createsubscriber
pg_dump
- 添加了选项
--no-policies
(提交 cd3c4512) - 添加了选项
--sequence-data
(提交 9c49f0e8) - 添加了选项
--with-data
/--with-schema
/--with-statistics
(commit bde2fb79) 已恢复 (commit 6a46089e) - 添加了选项
--statistics
(提交 6a46089e) - 添加了以下选项 (提交 1fd1bd87)
--schema-only
--no-schema
--data-only
--no-data
--statistics-only
--no-statistics
- 转储统计信息的效率改进 (提交 7d5c83b4 和 9c02e3a9)
- 添加了选项
pg_dumpall
pg_recvlogical
pg_restore
pg_verifybackup
- 添加了对 tar 格式备份验证的支持 (提交 8dfd3129)
vacuumdb
- 添加了选项
--missing-stats-only
(提交 edba754f)
- 添加了选项
服务器实用程序
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_COUNT
和PIPELINE_RESULT_COUNT
(提交 3ce35758) - 添加了命令
\sendpipeline
(提交 17caf664) \dx
现在显示默认扩展版本 (提交 d696406a)\watch
的默认间隔现在可以配置 (提交 1a759c83)
Contrib模块
已添加
pg_logicalinspect
(提交 7cdfeee3)pg_overexplain
(提交 8d5ceb11)
已修改
amcheck
- 添加了函数
gin_index_check()
(提交 14ffaece)
- 添加了函数
btree_gist
citext
cube
- 修改为使用纯解析器和可重入扫描器 (提交 802fe923)
dblink
- 添加了 SCRAM 身份验证直通支持 (提交 3642df26)
earthdistance
- 转换为使用 SQL 标准函数体 (提交 969bbd0f)
file_fdw
intarray
- 特化了
qsort
函数,以更好地支持非常大的整数数组 (提交 53d3daa4)
- 特化了
isn
- 添加了 GUC
isn.weak
,替换了isn_weak()
函数 (提交 44890442)
- 添加了 GUC
lo
- 函数定义转换为使用 SQL 标准函数体 (提交 13e3796c)
pageinspect
- 转换为使用 SQL 标准函数体 (提交 68ff25ee)
passwordcheck
- 添加了 GUC
passwordcheck.min_password_length
以启用指定最小密码长度 (提交 f7e1b382)
- 添加了 GUC
pg_buffercache
pgcrypto
pg_freespacemap
- 函数定义转换为使用 SQL 标准函数体 (提交 3f323eba)
pg_stat_statements
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_passthrough
将SCRAM
身份验证传递给远程服务器 (提交 761c7950)
- 列
seg
- 修改为使用纯解析器和可重入扫描器 (提交 1f0de66e)
xml2
- 转换为使用 SQL 标准函数体 (提交 667368fd)
发布计划和预发布测试版本
18rc1
(REL_18_RC1
) - 提交 62006223 (2025-09-01); 公告 (2025-09-04): PostgreSQL 18 RC 1 Released!18beta3
(REL_18_BETA3
) - 提交 ab844ce3 (2025-08-11); 公告 (2025-08-14): PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, and 18 Beta 3 Released!18beta2
(REL_18_BETA2
) - 提交 8bd92fc5 (2025-07-14); 公告 (2025-07-17): PostgreSQL 18 Beta 2 Released!18beta1
(REL_18_BETA1
) - 提交 caa76b91 (2025-05-05); 公告 (2025-05-08): PostgreSQL 18 Beta 1 Released!
标志着 PostgreSQL 18
开发开始的初始提交是 e26810d0 (2024-07-01)。
CommitFests
在 PostgreSQL 18
开发周期中举行的 CommitFests 如下:
- CommitFest 52 (2025-03-01 - 2025-03-31; 已关闭)
- CommitFest 51 (2025-01-01 - 2025-01-31; 已关闭)
- CommitFest 50 (2024-11-01 - 2024-11-30; 已关闭)
- CommitFest 49 (2024-09-01 - 2024-09-30; 已关闭))
- CommitFest 48 (2024-07-01 - 2024-07-31; 已关闭)