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 DATABASE
ALTER DEFAULT PRIVILEGES
- 现在需要权限而不是成员身份 (提交 48a257d4)
ALTER ROLE
ALTER TABLE
- 添加了
SET STORAGE DEFAULT
语法 (提交 b9424d01)
- 添加了
ALTER USER
ANALYZE
- 添加了选项
BUFFER_USAGE_LIMIT
(提交 1cbbee03)
- 添加了选项
COPY
CREATE COLLATION
- 添加了选项
RULES
(提交 30a53b79)
- 添加了选项
CREATE DATABASE
- 添加了选项
ICU_RULES
(提交 30a53b79)
- 添加了选项
CREATE RULE
- 现在无法在表上手动创建
ON SELECT
规则 (提交 b23cd185)
- 现在无法在表上手动创建
CREATE STATISTICS
- 统计信息名称现在是可选的 (提交 624aa2a1)
CREATE SUBSCRIPTION
CREATE TABLE
- 添加了
CREATE TABLE ... STORAGE ...
语法 (提交 784cedda)
- 添加了
EXPLAIN
- 添加了选项
GENERIC_PLAN
(提交 3c05284d)
- 添加了选项
GRANT
REINDEX
VACUUM
系统目录更改
表
已修改
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_setting
pg_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_tables
pg_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)filename
text
,missing_ok
boolean
)
- 可以调用为
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)
- 添加了选项
createuser
pg_dump
pg_verifybackup
- 添加了选项
-P
/--progress
(d07c2948)
- 添加了选项
vacuumdb
服务器实用程序
已修改
initdb
pg_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; 已关闭)