PostgreSQL 16
- 发行说明 (源文件)
- 发布日期:2023-09-14
- 当前次要版本:16.5 (2024-11-14)
- 结束支持日期:2028-11(估计)
- 文档:PostgreSQL 16 (索引)
- GIT 分支:REL_16_STABLE
次要版本发布
- 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
- 在清理表时识别配置更改(提交 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()
提交 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)
索引更改
- 提高了哈希索引构建速度(提交 d09dbeb9)
日志记录更改
- 添加了内部
log_status_format()
供emit_log_hook
等使用(提交 b40baa96) - 检查点 和恢复点 LSN 显示在
LogCheckpointEnd
日志消息中(提交 62c46eee) - 自动真空日志输出和
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
复制更改
逻辑复制
- 发布 可以包含来自同一模式的模式和单个表(提交 13a185f5)
- 可以创建跳过具有复制源数据的订阅(提交 36628396)
- 并行工作器应用的大型事务(提交 216a7848)
- 添加回调函数
ReorderBufferUpdateProgressTxnCB
以避免在长时间运行的 DDL 操作期间发生逻辑复制超时风险(提交 8c58624d) - 在应用
UPDATE
/DELETE
期间,订阅者可以使用除PRIMARY KEY
或REPLICA IDENTITY
之外的索引(提交 89e46da5) - 现在可以以二进制格式复制表(提交 ecb69652)
- 逻辑复制现在作为表所有者执行(提交 1e10d49b)
- 现在在备用服务器上支持逻辑解码(提交 0fdab27a)
- 逻辑复制槽现在可以由于地平线或
wal_level
而失效(提交 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
以下 CommitFest 用于 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;已关闭)