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_PRIVILEGESALTER ROLE- 默认情况下,如果为角色设置 MD5 加密密码,将发出
WARNING(提交 db6a4a98)
- 默认情况下,如果为角色设置 MD5 加密密码,将发出
ALTER SUBSCRIPTION- 添加了参数
two_phase(提交 1462aad2)
- 添加了参数
ALTER TABLEANALYZECOPYCREATE DATABASE- 如果
STRATEGY选项设置为WAL_LOG,将使用读取流 (提交 8720a15e) - 如果
STRATEGY选项设置为FILE_COPY,将使用file_copy_method中指定的复制文件的方法 (提交 f78ca6f3)
- 如果
CREATE FOREIGN TABLECREATE 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 TABLEDELETE- 在
RETURNING子句中添加了对OLD/NEW的支持 (提交 80feb727)
- 在
EXPLAININSERT- 在
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_constraintpg_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_contextspg_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_timetotal_autovacuum_timetotal_analyze_timetotal_autoanalyze_time
- 添加了以下列 (提交 30a6ed0c)
pg_stat_checkpointer- 添加了列
num_done(提交 559efce1)
- 添加了列
pg_stat_database- 添加了以下列 (提交 e7a9496d)
parallel_workers_to_launchparallel_workers_launched
- 添加了以下列 (提交 e7a9496d)
pg_stat_io- 添加了以下列 (提交 f92c854c)
read_byteswrite_bytes
- 添加了以下列 (提交 f92c854c)
pg_stat_wal- 移除了以下列 (提交 2421e9a5)
wal_writewal_syncwal_write_timewal_sync_time
- 移除了以下列 (提交 2421e9a5)
pg_stat_progress_analyze- 添加了列
delay_time(提交 bb8dff99)
- 添加了列
pg_stat_progress_vacuum- 添加了列
delay_time(提交 bb8dff99)
- 添加了列
pg_stat_subscription_stats- 添加了以下列 (提交 6c2b5ede)
confl_insert_existsconfl_update_origin_differsconfl_update_existsconfl_update_missingconfl_delete_origin_differsconfl_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_connectionslog_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)
核心实用程序
pgbenchpg_combinebackup- 添加了选项
-k/--link(提交 99aeb847)
- 添加了选项
pg_createsubscriberpg_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_dumpallpg_recvlogicalpg_restorepg_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_gistcitextcube- 修改为使用纯解析器和可重入扫描器 (提交 802fe923)
dblink- 添加了 SCRAM 身份验证直通支持 (提交 3642df26)
earthdistance- 转换为使用 SQL 标准函数体 (提交 969bbd0f)
file_fdwintarray- 特化了
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_buffercachepgcryptopg_freespacemap- 函数定义转换为使用 SQL 标准函数体 (提交 3f323eba)
pg_stat_statementspg_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; 已关闭)
