PostgreSQL 16
- 发行说明 (源文件)
- 发布日期:2023-09-14
- 当前次要版本:16.10 (2025-08-14)
- EOL:2028-11 (预估)
- 文档:PostgreSQL 16 (索引)
- GIT 分支:REL_16_STABLE
次要版本发布
- 16.10 (2025-08-14; 发行说明; 公告)
- 16.9 (2025-05-08; 发行说明; 公告)
- 16.8 (2025-02-20; 发行说明; 公告)
- 16.7 (2025-02-13; 发行说明; 公告)
- 16.6 (2024-11-21; 发行说明; 公告)
- 16.5 (2024-11-14; 发行说明; 公告)
- 16.4 (2024-08-08; 发行说明; 公告)
- 16.3 (2024-05-09; 发行说明; 公告)
- 16.2 (2024-02-08; 发行说明; 公告)
- 16.1 (2023-11-09; 发行说明; 公告)
源代码和构建更改
构建系统
- 支持 Meson 构建系统 (初始提交 e6927270)
源配置
- 添加了选项
--with-segsize-blocks(提交 d3b111e3)
pgindent
- 移除了已弃用的选项
--code-base和--build(提交 b16259b3) - 添加了选项
--commit(提交 068a243b 和 dab07e8c) - 现在可以提供多个
--excludes选项 (提交 a1c4cd6f) - 添加了选项
--show-diff和--silent-diff(提交 b90f0b57) - 将
pg_bsd_ident的源代码导入到核心仓库 (提交 4e831f4c)
后端更改
通用
- 查询乱序的代码已自动创建并支持工具语句 (提交 3db72ebc)
autovacuum
- 在 vacuuming 表时识别配置更改 (提交 7d71d3dd)
字符集和排序规则
- 添加了标准排序规则
unicode和ucs_basic(提交 0d21d4b9)
错误处理
- 支持“软”错误报告 (提交 d9f7f5d3)
扩展
- 添加了选项
@extschema:name@和no_relocate(提交 72a5b1fc)
钩子
- 添加了
ldap_password_hook(提交 419a8dd8)
物化视图
- 物化视图参与谓词锁定 (提交 43351557)
规划器
postmaster
- 移除了选项
-n(提交 51b5834c) - 选项
-T现在发送SIGABRT而不是SIGSTOP(提交 51b5834c) postmaster符号链接不再安装,这意味着直接调用后端始终通过postgres二进制文件 (提交 37e26733)
WAL
- freeze WAL 记录中的 freeze 计划已去重 (提交 9e540599)
walreceiver
- 唤醒间隔更准确地针对实际待处理的工作 (提交 05a7be93)
walsender
- 数据库名称显示在
ps显示中 (提交 af205152)
性能改进
- 改进了
ORDER BY/DISTINCT聚合的性能 (提交 1349d279) - 优化了
GROUP BY和DISTINCT中重复列的分组 (提交 8d83a5d0) - 对 分区表 的批量插入和更新效率更高 (提交 3592e0ff)
- 优化了快照查找 (提交 37a6e5df, b6ef1675 和 82739d4a)
- 改进了字符串到整数转换的性能 (提交 6b423ec6)
- 更有效地添加堆和索引页 (提交 31966b15, 26158b85 和 00d1e02b)
数据类型更改
通用
索引更改
通用
- 禁止为主键创建
NULLS NOT DISTINCT索引 (提交 d9595232)
BRIN
- 在检查 HOT 更新时忽略 BRIN 索引 (提交 19d8e230)
哈希索引
SQL 更改
通用
FROM子句的子查询别名不再是必需的 (提交 bcedd8f5)- 添加了对
ANY_VALUE聚合的支持 (提交 2ddab010) - 现在支持保留关键字
SYSTEM_USER(提交 0823d061) - 添加了谓词
IS JSON(提交 6ee30209)
已修改
ALTER DATABASEALTER DEFAULT PRIVILEGES- 现在需要权限而不是成员身份 (提交 48a257d4)
ALTER ROLEALTER TABLE- 添加了
SET STORAGE DEFAULT语法 (提交 b9424d01)
- 添加了
ALTER USERANALYZE- 添加了选项
BUFFER_USAGE_LIMIT(提交 1cbbee03)
- 添加了选项
COPYCREATE COLLATION- 添加了选项
RULES(提交 30a53b79)
- 添加了选项
CREATE DATABASE- 添加了选项
ICU_RULES(提交 30a53b79)
- 添加了选项
CREATE RULE- 现在无法在表上手动创建
ON SELECT规则 (提交 b23cd185)
- 现在无法在表上手动创建
CREATE STATISTICS- 统计信息名称现在是可选的 (提交 624aa2a1)
CREATE SUBSCRIPTIONCREATE TABLE- 添加了
CREATE TABLE ... STORAGE ...语法 (提交 784cedda)
- 添加了
EXPLAIN- 添加了选项
GENERIC_PLAN(提交 3c05284d)
- 添加了选项
GRANTREINDEXVACUUM
系统目录更改
表
已修改
pg_attribute- 列
attndims,attstattarget和attinhcount从INTEGER更改为SMALLINT(提交 90189eef)
- 列
pg_auth_members- 添加了列
set_option(提交 3d14e171)
- 添加了列
pg_class- 列
relfilenode的类型从oid更改为int8(提交 05d4cbf9)
- 列
pg_collation- 添加了列
collicurules(提交 30a53b79)
- 添加了列
pg_constraint- 列
coninhcount从INTEGER更改为SMALLINT(提交 90189eef)
- 列
pg_database- 添加了列
daticurules(提交 30a53b79)
- 添加了列
pg_db_role_settingpg_subscription
视图
已添加
pg_stat_io(提交 a9c70b46)
已修改
pg_prepared_statements- 添加了列
result_types(提交 84ad713c)
- 添加了列
pg_replication_slots- 添加了列
conflicting(提交 be87200e)
- 添加了列
pg_stat_all_indexes- 添加了列
last_idx_scan(提交 c0374718)
- 添加了列
pg_stat_all_tablespg_stat_gssapi- 添加了列
credentials_delegated(提交 6633cfb2)
- 添加了列
pg_stat_subscription- 添加了列
leader_pid(提交 d540a02a)
- 添加了列
系统函数更改
已添加
array_sample()(提交 888f2ea0)array_shuffle()(提交 888f2ea0)date_add()提交 75bd846b)date_subtract()提交 75bd846b)erf()(提交 d5d57414)erfc()(提交 d5d57414)pg_input_error_info()(提交 1939d262)pg_input_is_valid()(提交 1939d262)pg_log_standby_snapshot()(提交 0fdab27a)pg_split_walfile_name()(提交 cca18634)pg_stat_get_backend_subxact()(提交 10ea0f92)random_normal()(提交 38d81760)
已修改
array_agg()- 添加了并行聚合支持 (提交 16fd03e9)
generate_series()- 添加了计算指定时区中时间序列的日时间和夏令时的变体 (提交 75bd846b)
makeaclitem()- 现在可以指定多个权限 (提交 b762bbde)
pg_collation_actual_version()- 现在使用默认排序规则生效,而不是返回
NULL(提交 10932ed5)
- 现在使用默认排序规则生效,而不是返回
pg_create_logical_replication_slot()- 可以在备用服务器上执行 (提交 0fdab27a)
pg_import_system_collations()- 添加了 Windows 支持 (提交 bf03cfd1)
pg_read_file()- 可以调用为
pg_read_file ((提交 283129e3)filenametext,missing_okboolean)
- 可以调用为
pg_size_bytes()- 添加了
B作为bytes的别名 (提交 ce1215d9)
- 添加了
pg_stat_get_backend_idset()- 返回实际后端 ID (提交 d7e39d72)
pg_stat_reset_shared()- 添加了选项
io(提交 28e626bd)
- 添加了选项
power()- 改进了数值
power()对整数指数的精度 (提交 40c7fcbb)
- 改进了数值
array_agg()- 添加了并行聚合支持 (提交 16fd03e9)
to_regclass()to_regcollation()to_regnamespace()to_regoper()to_regoperator()to_regproc()to_regprocedure()to_regrole()to_regtype()xmlserialize()- 添加了对选项
[NO] INDENT的支持 (提交 483bdb2a)
- 添加了对选项
配置更改
通用
已添加
createrole_self_grant(提交 e5b8a4c0)debug_io_direct(初始提交 d4e71df6)debug_logical_replication_streaming(初始提交 5de94a04)debug_parallel_query(提交 5352ca22)enable_presorted_aggregate(提交 3226f472)gss_accept_delegation(初始提交 3d4fa227, 最初为gss_accept_deleg但在提交 9c0a0e2e 中重命名)icu_validation_level(提交 1671f990)max_parallel_apply_workers_per_subscription(提交 216a7848)reserved_connections(提交 6e2775e4)scram_iterations(提交 b5777430)send_abort_for_crash(提交 51b5834c)send_abort_for_kill(提交 51b5834c)vacuum_buffer_usage_limit(提交 1cbbee03)vacuum_freeze_strategy_threshold(提交 4d417992)已在 6c6b4972 中撤销
已修改
archive_command- 现在不能与
archive_library同时设置 (提交 d627ce3b)
- 现在不能与
archive_library- 现在不能与
archive_command同时设置 (提交 d627ce3b)
- 现在不能与
shared_preload_libraries- 现在在单用户模式下处理 (提交 6c31ac09)
wal_sync_method- 现在 Windows 支持选项
fdatasync(提交 9430fb40)
- 现在 Windows 支持选项
移除
lc_collate(提交 b0f6c437)lc_ctype(提交 b0f6c437)promote_trigger_file(提交 cd4329d9)force_parallel_mode已重命名为debug_parallel_query(提交 5352ca22)vacuum_defer_cleanup_age(提交 1118cd37)
平台支持变更
HP/Intel Itanium
- 移除了支持 (提交 0ad5b48e)
HP-UX
- 移除了端口 (提交 9db300ce)
Windows
- 移除了对 Windows 10 以下版本的支持 (提交 495ed0ef)
日志记录更改
- 添加了内部函数
log_status_format()以供emit_log_hook等使用 (提交 b40baa96) - 检查点和恢复点 LSNs 显示在
LogCheckpointEnd日志消息中 (提交 62c46eee) - 自动 vacuum 的日志输出和
VACUUM VERBOSE的输出现在包括一行,其中包含被冻结的元组总数以及被冻结的元组总数 (提交 d977ffd9) - LSN 现在包含在一些与 WAL 页相关的错误消息中 (提交 71cb84ec)
用户/角色
- 超级用户权限不能再从引导用户中移除 (提交 e530be2c)
pg_maintain预定义角色已添加 (提交 60684dd8) 已撤销 (提交 151c22de)- 添加了
pg_use_reserved_connections预定义角色 (提交 6e2775e4) - 添加了
pg_create_subscription预定义角色 c3afe8cf) - 具有
CREATEROLE属性的用户被限制只能管理他们创建的角色或已被授予权限的角色 (提交 cf5eb37c)
认证更改
通用
- 添加了对 Kerberos 凭证委派的支持 (初始提交 3d4fa227)
pg_hba.conf
pg_ident.conf
- 添加了对文件包含的支持 (提交 a54b658c)
- 支持非字面用户名匹配,如
pg_hba.conf中 (提交 efb6f4a4)
过程语言更改
PL/pgSQL
复制更改
逻辑复制 (Logical replication)
- 发布可以包含同一个模式下的模式和单个表 (提交 13a185f5)
- 可以创建跳过具有复制源的数据的订阅 (提交 36628396)
- 并行工作进程应用大事务 (提交 216a7848)
- 添加了回调
ReorderBufferUpdateProgressTxnCB以避免在长期 DDL 操作期间出现逻辑复制超时风险 (提交 8c58624d) - 在订阅者应用
UPDATE/DELETE时,可以使用PRIMARY KEY或REPLICA IDENTITY以外的索引 (提交 89e46da5) - 现在可以以二进制格式复制表 (提交 ecb69652)
- 逻辑复制现在作为表所有者执行 (提交 1e10d49b)
- 现在在备用服务器上支持逻辑解码 (提交 0fdab27a)
- 逻辑复制槽可能因 horizon 或
wal_level而失效 (提交 be87200e)
libpq 更改
通用
- 使用
SOCK_CLOEXEC和SOCK_NONBLOCK,如果可用 (提交 bfc9497e) - 添加了连接参数
load_balance_hosts,支持连接负载均衡 (提交 7f5b1981)
连接参数
已添加
load_balance_hosts(提交 7f5b1981)require_auth(提交 3a465cc6)sslcertmode(提交 36f40ce2)- 添加了连接参数
gssdelegation(初始提交 6633cfb2)
外部数据包装器 (FDW) 更改
- 现在允许在 外部表 上触发
TRUNCATE(提交 3b00a944) - 如果
FDW支持,COPY现在可以为批量插入将元组传递给FDW(提交 97da4824) - 现在可以在交叉分区更新期间批处理插入 (提交 594f8d37)
信息模式更改
- 已更新以支持
SQL:2023(提交 f275af8c)
核心实用程序
已修改
createdb- 添加了选项
--icu-rules(提交 30a53b79)
- 添加了选项
createuserpg_dumppg_verifybackup- 添加了选项
-P/--progress(d07c2948)
- 添加了选项
vacuumdb
服务器实用程序
已修改
initdbpg_rewind- 修复了服务器提升后的 TLI 确定 (009eeee7)
pg_upgrade- 添加了选项
--copy(提交 746915c6
- 添加了选项
pg_waldump
psql
- 添加了命令
\drg(提交 0a1d2a7d) - 添加了命令
\pset选项xheader_width(提交 a45388d6) \d+在 分区表 上现在指示外部分区 (提交 bd95816f)- 添加了命令
\bind用于设置查询参数和使用扩展查询协议 (提交 5b66de34) - 添加了命令
\dpS和\zS(提交 d913928c) \df+显示“内部名称”而不是“源文件” (提交 3dfae91f)- 添加了魔法变量
SHELL_ERROR和SHELL_EXIT_CODE(提交 b0d8f2d9 和 31ae2aa9) - 在命令
\watch中添加了可选的执行次数限制 (提交 00beecfe)
Contrib 模块变更
auto_explain
- 添加了选项
auto_explain.log_parameter_max_length(提交 d4bfe412)
dblink
- 当客户端将 GSSAPI 凭证委派给服务器,并且使用 GSSAPI 对远程系统进行身份验证时,允许非超级用户进行无密码连接 (提交 3d4fa227)
fuzzystrmatch
- 添加了对 Daitch-Mokotoff Soundex 的支持 (提交 a290378a)
ltree
- 最大标签长度已扩展到
1000个字符,并且标签可以包含连字符 (提交 b1665bf0)
pageinspect
pg_buffercache
pg_stat_statements
- 添加了工具语句的查询乱序 (提交 3db72ebc)
pg_walinspect
- 添加了函数
pg_get_wal_block_info()(提交 c31cf1c0, 最初为pg_get_wal_fpi_info()但在提交 9ecb134a 中重命名并扩展) - 函数
pg_get_wal_records_info(),pg_get_wal_stats()和pg_get_wal_block_info()接受大于当前 LSN 的 LSN 值 (提交 5c1b6628) - 移除了函数
pg_get_wal_records_info_till_end_of_wal()和pg_get_wal_stats_till_end_of_wal()(提交 5c1b6628)
postgres_fdw
- 可以通过表采样提取 ANALYZE 返回的数据 (提交 8ad51b5f)
- 添加了选项
analyze_sampling(提交 8ad51b5f) - 添加了对并行 abort 的支持 (提交 983ec230)
- 添加了对
TRUNCATE触发器的支持 (提交 3b00a944) - 当客户端将 GSSAPI 凭证委派给服务器,并且使用 GSSAPI 对远程系统进行身份验证时,允许非超级用户进行无密码连接 (提交 3d4fa227)
测试
pg_regress
- 输出现在符合 TAP 标准 (提交 558fff0a)
发布计划和预发布测试版本
16rc1(REL_16_RC1) - 提交 d94dadcc (2023-08-28); 公告 (2023-08-31): PostgreSQL 16 RC1 发布!16beta3(REL_16_BETA3) - 提交 0dd55453 (2023-08-07); 公告 (2023-06-10): PostgreSQL 15.4, 14.9, 13.12, 12.16, 11.21 和 PostgreSQL 16 Beta 3 发布!16beta2(REL_16_BETA2) - 提交 19508f47 (2023-06-26); 公告 (2023-06-29): PostgreSQL 16 Beta 2 发布!16beta1(REL_16_BETA1) - 提交 e0b82fc8 (2023-05-22); 公告 (2023-05-25): PostgreSQL 16 Beta 1 发布!
标志着 PostgreSQL 16 开发开始的初始提交是 d31d3097 (2022-06-30)。
CommitFests
以下 CommitFests 用于 PostgreSQL 16 代码提交
- CommitFest 42 (2023-03-01 - 2023-03-31; 已关闭)
- CommitFest 41 (2023-01-01 - 2023-01-31; 已关闭)
- CommitFest 40 (2022-11-01 - 2022-11-30; 已关闭)
- CommitFest 39 (2022-09-01 - 2022-09-30; 已关闭)
- CommitFest 38 (2022-07-01 - 2022-07-31; 已关闭)
