PostgreSQL 17
PostgreSQL 17 是最新的 PostgreSQL 主要版本,于 2024 年 9 月发布。
- 发布说明 (源文件)
- 发布日期:2024-09-26
- 当前次要版本:17.6 (2025-08-14)
- EOL:2029-11 (预计)
- 文档:PostgreSQL 17 (索引)
- GIT 分支:REL_17_STABLE
次要版本发布
- 17.6 (2025-08-14; 发布说明;公告)
- 17.5 (2025-05-08; 发布说明;公告)
- 17.4 (2025-02-20; 发布说明;公告)
- 17.3 (2025-02-13; 发布说明;公告)
- 17.2 (2024-11-21; 发布说明;公告)
- 17.1 (2024-11-14; 发布说明;公告)
主要特性
- 支持增量备份 (初始提交 dc212340)
- 逻辑复制的故障转移控制
源代码和构建更改
配置
源代码
- 等待事件相关的代码和文档自动生成 (提交 fa889284)
平台支持
- 移除了对 AIX 的支持 (提交 0b16bb87)
后端更改
通用
- 启动数据包中的数据库和用户名不再截断 (提交 562bee0f) 兼容性更改
- 添加了 WAL 汇总进程 (提交 174c4805)
- 添加了内部
TIDStore功能,用于存储大量的TID(初始提交 30e14428)
后台工作进程
bgw_library_name的长度从96增加到1024字节 (提交 95784578)
字符集和排序规则
- 添加了排序规则提供程序 "
builtin" (提交 2d819a08)
事件触发器
优化器
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
SQL 更改
- 添加了对命名
NOT NULL约束的支持 (提交 b0e96f31) - 添加了对时间
PRIMARY KEY和UNIQUE约束的支持 (提交 46a0cd4c) 已撤销 (提交 8aee330a) - 添加了对时间
FOREIGN KEY约束的支持 (提交 34768ee3) 已撤销 (提交 8aee330a)
已修改
ALTER OPERATOR- 现在可以设置
COMMUTATOR、NEGATOR、MERGES和HASHES属性 (提交 2b5154be)
- 现在可以设置
ALTER STATISTICS- 添加了
ALTER STATISTICS ... SET STATISTICS DEFAULT语法 (提交 4f622503)
- 添加了
ALTER SUBSCRIPTION- 添加了参数
failover(提交 776621a5)
- 添加了参数
ALTER SYSTEMALTER 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)
- 添加了
COPYCREATE SUBSCRIPTION- 添加了参数
failover(提交 776621a5)
- 添加了参数
CREATE TABLEEXPLAINGRANT- 添加了
MAINTAIN权限 (提交 ecb0fd33)
- 添加了
MERGE
分区更改
索引更改
BRIN
- 现在支持并行
CREATE INDEX(提交 b4375717)
GiST
- 添加了对增量排序的支持 (提交 625d5b3c)
SP-GiST
- 添加了对增量排序的支持 (提交 625d5b3c)
系统目录更改
表
已修改
pg_attributepg_collationcolliculocale列重命名为colllocale(提交 f696c0cd)
pg_constraintpg_databasepg_depend]pg_stat_bgwriter- 移除了以下列 (提交 74604a37)
buffers_backendbuffers_backend_fsync
- 在引入
pg_stat_checkpointer后移除了以下列 (提交 96f05261)checkpoints_timedcheckpoints_reqcheckpoint_write_timecheckpoint_sync_timebuffers_checkpoint
- 移除了以下列 (提交 74604a37)
pg_statistic_ext
视图
已添加
pg_stat_checkpointer(提交 96f05261)pg_wait_events(提交 1e68e43d)
已修改
pg_replication_slots
pg_stat_progress_copy- 添加了
tuples_skipped列 (提交 72943960)
- 添加了
pg_stat_progress_vacuumpg_stat_slru- SLRU 缓存重命名 (提交 bcdfa5f2)
pg_stat_subscription- 添加了
worker_type列 (提交 13aeaf07)
- 添加了
pg_stats- 添加了以下列 (提交 bc3c8db8)
range_length_histogramrange_empty_fracrange_bounds_histogram
- 添加了以下列 (提交 bc3c8db8)
pg_subscription- 添加了
subfailover列 (提交 776621a5)
- 添加了
系统函数更改
已添加
icu_unicode_version()(提交 a02b37fc)jsonb_populate_record_valid()(提交 1edb3b49)pg_available_wal_summaries()(提交 174c4805)pg_basetype()(提交 b154d8a6)pg_column_toast_chunk_id()(提交 d1162cfd)pg_get_wal_summarizer_state()(提交 d9ef650f)pg_sync_replication_slots()(提交 ddd5f4f5)pg_wal_replay_wait()(提交 06c418e1) 已撤销 (提交 772faafc)pg_wal_summary_contents()(提交 174c4805)to_bin()(提交 260a1f18)to_oct()(提交 260a1f18)to_regtypemod()(提交 1218ca99)unicode_assigned()(提交 a02b37fc)unicode_version()(提交 a02b37fc)uuid_extract_timestamp()(提交 794f10f6)uuid_extract_version()(提交 794f10f6)xmltext()(提交 526fe0d7)
已修改
pg_create_logical_replication_slot()- 添加了选项
failover(提交 c393308b)
- 添加了选项
pg_current_logfile()pg_logical_emit_message()- 添加了参数
flush(提交 173b56f1)
- 添加了参数
pg_promote()- 在
kill()或 postmaster 失败时报告失败 (提交 f593c551)
- 在
pg_stat_reset_shared()pg_stat_reset_slru()pg_walfile_name()- LSN 位于段边界时,返回当前段号 (提交 344afc77)
pg_walfile_name_offset()- LSN 位于段边界时,返回当前段号 (提交 344afc77)
random()- 添加了
random(min, max)变体 (提交 e6341323)
- 添加了
配置更改
已添加
allow_alter_system(提交 d3ae2a24)backtrace_on_internal_error(提交 a740b213) 已撤销 (提交 592a2283)enable_self_join_removal(提交 d3d55ce5) 已撤销 (提交 d1d286d8)event_triggers(提交 7750fefd)huge_pages_status(提交 a14354ca)io_combine_limit(提交 210622c6)max_notify_queue_pages(提交 2cdf131c)or_to_any_transform_limit(提交 72bd38cc) 已撤销 (提交 ff9f72c6)summarize_wal(提交 174c4805)sync_replication_slots(提交 93db6cbd)synchronized_standby_slots(提交 bf279ddd)trace_connection_negotiation(提交 705843d2)transaction_timeout(提交 51efe38c)wal_summary_keep_time(提交 174c4805)
已修改
autovacuum_work_mem- 最小值从
1MB降低到64kB(提交 bbf668d6)
- 最小值从
log_connections- 显式记录没有 auth ID 的连接,例如
trust(提交 e48b19c5)
- 显式记录没有 auth ID 的连接,例如
log_replication_commands- 记录复制槽的获取和释放 (7c3fb505)
maintenance_work_mem- 最小值从
1MB降低到64kB(提交 bbf668d6)
- 最小值从
vacuum_buffer_usage_limit- 默认值更改为
2MB(提交 98f320eb)
- 默认值更改为
wal_sync_method- 在 Windows 上移除了
fsync_writethrough选项 (提交 8c852ba9)
- 在 Windows 上移除了
移除
db_user_namespace(提交 884eee5b)old_snapshot_threshold(提交 f691f5b8)trace_recovery_messages(提交 c7a3e6b4)
用户/角色
认证更改
- 移除了对 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)
核心实用程序
已添加
pg_combinebackup(提交 dc212340)pg_createsubscriber(提交 d44032d0)pg_walsummary(提交 ee1bfd16)
已修改
clusterdb- 选项
-a/--all可以与选项-t/--table结合使用 (提交 1b49d56d)
- 选项
createdb- 选项
--locale-provider接受附加值builtin(提交 2d819a08)
- 选项
pg_amcheck- 添加了选项
--checkunique(提交 5ae20872)
- 添加了选项
pg_archivecleanuppg_basebackuppgbenchpg_dumppg_dumpall- 添加了选项
--filter(提交 a5cf808b)
- 添加了选项
pg_receivewalpg_restorereindexdbvacuumdb- 选项
-a/--all现在可与--table、--schema和--exclude-schema结合使用 (提交 648928c7)
- 选项
服务器实用程序
initdbpg_checksums- 添加了选项
--sync-method(提交 8c16ad3b)
- 添加了选项
pg_rewind- 添加了选项
--sync-method(提交 8c16ad3b)
- 添加了选项
pg_upgrade
psql 更改
- 添加了命令
\drg(提交 d65ddaca) - 向
\watch命令添加了参数min_rows(提交 f347ec76) - 改进了默认和空权限的显示 (提交 d1379ebf)
- 数据库重新连接现在可以通过
SIGINT取消 (提交 cafe1056)
Contrib模块
已修改
amcheck- 添加了对检查唯一约束冲突的支持 (提交 5ae20872)
dblink- 远程查询现在是可中断的 (提交 d3c5f37d)
ltree- 添加了哈希支持 (提交 485f0aa8)
pg_buffercache- 添加了函数
pg_buffercache_evict()(提交 13453eed)
- 添加了函数
pgrowlocks- 标签
Share和Key Share已更改为For Share和For Key Share(提交 15d5d740)
- 标签
pg_stat_statements- 现在将 savepoint 名称显示为常量 (提交 31de7e60)
- 两阶段提交命令的 GID 现在显示为常量 (提交 638d42a3)
- 现在将
DEALLOCATE语句的名称显示为常量 (提交 bb45156f) - 将列
jit_deform_count和jit_deform_time添加到视图pg_stat_statements(提交 5a3423ad) - 现在将
CALL参数显示为常量 (提交 11c34b34) - 将列
local_blk_read_time和local_blk_write_time添加到视图pg_stat_statements(提交 5147ab1d) - 将列
stats_since和minmax_stats_since添加到视图pg_stat_statements(提交 dc9f8a79)
pg_prewarm- 修改为使用流式 I/O (提交 3a352df0)
postgres_fdwtest_decodingunaccent- 添加了对带引号的翻译字符的支持 (59f47fb9)
移除
adminpack(提交 cc09e654)old_snapshot(提交 f691f5b8)
测试
- 为注入点添加了后台支持 (初始提交 d86d20f0)
pg_regress
TAP 测试
测试模块
已修改
worker_spi- 自定义等待事件重命名为
WorkerSpiMain(提交 c8e318b1)
- 自定义等待事件重命名为
移除
snapshot_too_old(提交 f691f5b8)
其他
\v在各种解析器中现在被视为空白字符 (提交 ae6d06f0)
发布计划和预发布测试版本
17.0- 提交 d7ec59a6 (2024-09-23)17rc1(REL_17_RC1) - 提交 94f1474e (2024-09-02); 公告 (2024-09-05): PostgreSQL 17 RC1 发布!17beta3(REL_17_BETA3) - 提交 b18b3a81 (2024-08-05); 公告 (2024-08-08): PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20 和 17 Beta 3 发布!17beta2(REL_17_BETA2) - 提交 23c5a0e7 (2024-06-24); 公告 (2024-06-27): PostgreSQL 17 Beta 2 发布!17beta1(REL_17_BETA1) - 提交 86a2d2a3 (2024-05-20); 公告 (2024-05-23): PostgreSQL 17 Beta 1 发布!
标志着 PostgreSQL 17 开发开始的初始提交是 5bcc7e6d (2023-06-29)。
CommitFests
- CommitFest 47 (2024-03-01 - 2024-03-31; 已关闭)
- CommitFest 46 (2024-01-01 - 2024-01-31; 已关闭)
- CommitFest 45 (2023-11-01 - 2023-11-31; 已关闭)
- CommitFest 44 (2023-09-01 - 2023-09-30; 已关闭)
- CommitFest 43 (2023-07-01 - 2023-07-31; 已关闭)
