PostgreSQL 16
PostgreSQL 16
是最新发布的 PostgreSQL 主版本,于 2023 年 9 月 14 日发布。
- 发行说明 (源文件)
- 发布日期:2023-09-14
- 当前次要版本:16.4 (2024-08-08)
- EOL:2028-11 (预计)
- 文档:PostgreSQL 16 (索引)
- GIT 分支:REL_16_STABLE
次要版本发布
- 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
- 在对表进行 vacuum 时识别配置更改(提交 7d71d3dd)
字符集和排序规则
- 添加了标准排序规则
unicode
和ucs_basic
(提交 0d21d4b9)
扩展
- 添加了
@extschema:name@
和no_relocate
选项(提交 72a5b1fc)
钩子
- 添加了
ldap_password_hook
(提交 419a8dd8)
物化视图
- 物化视图参与谓词锁定(提交 43351557)
计划器
postmaster
- 删除了选项
-n
(提交 51b5834c) - 选项
-T
现在发送SIGABRT
而不是SIGSTOP
(提交 51b5834c) postmaster
符号链接不再安装,这意味着直接后端调用始终通过postgres
二进制文件进行(提交 37e26733)
WAL
- 冻结 WAL 记录中的冻结计划去重(提交 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)
哈希索引
- 哈希索引构建速度得到提升(提交 e09d7a12)
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()
提交 75bd846bdate_subtract()
提交 75bd846berf()
(提交 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
fdatasync
选项现在在 Windows 上支持(提交 9430fb40)
移除
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)
索引更改
- 改进了散列索引构建速度(提交 d09dbeb9)
日志记录更改
- 添加了内部
log_status_format()
函数,供emit_log_hook
等使用(提交 b40baa96) - 在
LogCheckpointEnd
日志消息中显示了 检查点 和恢复点 LSN(提交 62c46eee) - 自动真空日志输出和
VACUUM VERBOSE
输出现在包括一行,其中包含冻结了一个或多个元组的堆页总数,以及冻结的元组总数(提交 d977ffd9) - 现在在一些与 WAL 页相关的错误消息中包含了 LSN(提交 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
复制更改
逻辑复制
- 发布 可以包含来自同一模式的模式和单个表(提交 13a185f5)
- 可以创建订阅,这些订阅会跳过具有复制来源的数据(提交 36628396)
- 并行工作者应用大型事务(提交 216a7848)
- 添加了回调
ReorderBufferUpdateProgressTxnCB
,以避免在长时间运行的 DDL 操作期间出现逻辑复制超时风险(提交 8c58624d) - 在应用
UPDATE
/DELETE
时,订阅者可以使用除PRIMARY KEY
或REPLICA IDENTITY
之外的索引(提交 89e46da5) - 现在可以以二进制格式复制表(提交 ecb69652)
- 逻辑复制现在以表所有者的身份执行(提交 1e10d49b)
- 逻辑解码现在在备用服务器上支持(提交 0fdab27a)
- 逻辑复制槽现在可以失效(提交 be87200e)
libpq 更改
一般
- 使用
SOCK_CLOEXEC
和SOCK_NONBLOCK
,如果可用(提交 bfc9497e) load_balance_hosts
连接参数已添加,提供对连接负载均衡的支持(提交 7f5b1981)
连接参数
已添加
外部数据包装器 更改
TRUNCATE
外部表上的触发器现在允许(提交 3b00a944)COPY
现在可以将元组传递给FDW
用于批量插入,如果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) - 添加了对并行中止的支持(提交 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; 已关闭)