PostgreSQL 15
- 发布说明 (源文件)
- 发布日期:2022-10-13 (公告)
- 当前次要版本:15.8 (2024-08-08)
- EOL:2027-11 (预计)
- 文档:PostgreSQL 15 (索引)
- GIT 分支:REL_15_STABLE
次要版本发布
- 15.8 (2024-08-08; 发布说明; 公告)
- 15.7 (2024-05-09; 发布说明; 公告)
- 15.6 (2024-02-08; 发布说明; 公告)
- 15.5 (2023-11-09; 发布说明; 公告)
- 15.4 (2023-08-10; 发布说明; 公告)
- 15.3 (2023-05-11; 发布说明; 公告)
- 15.2 (2023-02-09; 发布说明, 公告)
- 15.1 (2022-11-10; 发布说明, 公告)
后端更改
一般
- the
后台写进程
和检查点进程
现在也将在崩溃恢复期间运行 (提交 7ff23c6d) - 带有尾随非数字字符的数字文字现在将被拒绝 (提交 2549f066)
- 数据库创建可以在不需要 检查点 的情况下执行 (提交 9c08aea6)
- 改进的 PRNG API 和算法 (提交 3804539e)
源代码配置
- 添加了
--with-zstd
选项 (初始提交 6c417bbc)
ABI
- PostgreSQL 分支现在可以明确地声明其 ABI 不兼容 (提交 d6d1dfcc)
备份
- 独占备份模式 (自 PostgreSQL 9.6 开始弃用) 已移除 (提交 39969e2a)
执行器
- 单调窗口函数的执行得到改进 (提交 9d9c02cc)
钩子
添加
修改
object_access_hook
- 现在在
ALTER TABLE
重写表后被调用 (提交 7b565843)
- 现在在
日志记录
- 添加了针对过度 ProcSignalBarrier 等待的日志记录 (提交 0d343149)
- 通过
log_destination
选项jsonlog
添加了 JSON 格式的日志输出 (dc686681)
权限
- 非超级用户可以对单个 GUC 授予
SET
和ALTER SYSTEM
权限 (提交 a0ffa885)
计划器
- 单调窗口函数的执行得到改进 (提交 9d9c02cc)
postmaster
- 选项
--forkboot
重命名为--forkaux
(提交 50017f77) CREATE
权限现在默认情况下始终从PUBLIC
中撤销,现在由pg_database_owner
角色拥有 (提交 b073c3cc)- 选项
-C
现在显示运行时计算的 GUC (提交 0c39c292)
序列
- 添加了非日志序列 (提交 344d62fb)
统计收集器
- 被共享内存实现取代 (提交 5891c7a8)
vacuum
VACUUM VERBOSE
和autovacuum
操作现在报告relfrozenxid
和relminmxid
如何推进的详细信息 (提交 872770fd)
WAL
- 全页写入可以用以下方法压缩
- 添加了对自定义资源管理器的支持 (提交 5c279a6d)
- 添加了对 WAL 预取的支持 (提交 5dc0418f)
- 改进了
pg_wal/archive_status
目录扫描的性能 (提交 beb4e9ba)
数据类型更改
一般
- 添加了用于“内部使用”类型的新类型类别 (提交 07eee5a0)
修改
分区更改
SQL 更改
一般
- 通过
UNIQUE [ NULLS [ NOT ] DISTINCT ]
选项配置UNIQUE
约束中NULL
值的相等性(提交 94aa7cc5) IS JSON
谓词已添加(提交 33a37760) 已撤回(提交 2f2b18bd)- 已添加以下符合 SQL 标准的 JSON 函数(提交 606948b0 和 49082c2c) 已撤回(提交 2f2b18bd)
JSON()
JSON_SCALAR()
JSON_SERIALIZE()
添加
修改
ALTER DATABASE
- 已添加
REFRESH COLLATION VERSION
语法(提交 37851a8b)
- 已添加
ALTER PUBLICATION
ALTER SEQUENCE
- 已添加
SET [ LOGGED | UNLOGGED ]
语法(提交 344d62fb)
- 已添加
ALTER SUBSCRIPTION
ALTER TABLE
ALTER VIEW
- 已添加选项
security_invoker
(提交 7faa5fc8)
- 已添加选项
CLUSTER
COPY
CREATE DATABASE
CREATE INDEX
- 已添加
UNIQUE [ NULLS [ NOT ] DISTINCT ]
语法(提交 94aa7cc5)
- 已添加
CREATE PUBLICATION
CREATE SEQUENCE
- 已添加
CREATE UNLOGGED SEQUENCE
语法(提交 344d62fb)
- 已添加
CREATE SUBSCRIPTION
CREATE TABLE
CREATE VIEW
- 已添加选项
security_invoker
(提交 7faa5fc8)
- 已添加选项
EXPLAIN
- 跟踪临时文件块的 I/O 定时(efb0ef90)
GRANT
- 已添加
GRANT { { SET | ALTER SYSTEM } [, ... ] | ALL [ PRIVILEGES ] } ON PARAMETER ...
语法(提交 a0ffa885)
- 已添加
REVOKE
REVOKE [ GRANT OPTION FOR ] { { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] } ON PARAMETER ...
语法已添加(提交 a0ffa885)
SELECT
- 已添加并行
DISTINCT
支持(提交 22c4e88e)
- 已添加并行
SET
系统目录更改
表
添加
修改
pg_collation
pg_constraint
- 已添加列
confdelsetcols
(提交 d6f96ed9)
- 已添加列
pg_database
pg_statistic_ext_data
- 已添加列
stxdinherit
(提交 269b532a)
- 已添加列
pg_subscription
视图
添加
pg_ident_file_mappings
(提交 a2c84990)pg_stat_recovery_prefetch
(提交 5dc0418f)pg_stat_subscription_stats
(提交 8d74fc96 和 7a850732))
修改
pg_stats_ext
- 已添加列
inherited
(提交 269b532a)
- 已添加列
pg_stats_ext_exprs
- 已添加列
inherited
(提交 269b532a)
- 已添加列
系统函数更改
添加
has_parameter_privilege()
(提交 a0ffa885)pg_backup_start()
(提交 39969e2a)pg_backup_stop()
(提交 39969e2a)pg_database_collation_actual_version()
(提交 37851a8b)pg_ls_logicalsnapdir()
(提交 1922d7c6)pg_ls_logicalmapdir()
(提交 1922d7c6)pg_ls_replslotdir()
(提交 1922d7c6)pg_settings_get_flags()
(提交 d10e41d4)regexp_count()
(提交 64243370)regexp_instr()
(提交 64243370)regexp_like()
(提交 64243370)regexp_substr()
(提交 64243370)
修改
array_to_tsvector()
- 禁止创建空词素 (提交 cbe25dcf)
pg_encoding_to_char()
- 添加文档 (提交 f6b5d05b)
pg_log_backend_memory_contexts()
- 非超级用户可以被授予执行权限 (提交 f0b051e3)
pg_size_bytes()
- 能够转换 PB 单位大小 (提交 ca2e4472)
pg_size_pretty()
- 能够以 PB 单位输出大小 (提交 ca2e4472)
pg_stat_reset_shared()
- 添加
recovery_prefetch
选项 (提交 5dc0418f)
- 添加
pg_stat_reset_single_table_counters()
- 现在能够重置集群级共享表的统计信息 (提交 e0426784)
poly_distance()
- 完全实现 (之前是一个非功能性存根) (提交 c5c192d7)
random()
- 改进的 PRNG API 和算法 (提交 3804539e)
range_agg()
- 添加具有
multirange
输入的版本 (提交 7ae1619b)
- 添加具有
regexp_replace()
- 添加开始位置 (参数
start
) 和匹配位置 (参数N
) (提交 64243370)
- 添加开始位置 (参数
setweight()
- 现在允许
NULL
值 (提交 cbe25dcf)
- 现在允许
to_char()
- 添加对
of
,tzh
和tzm
格式模式的支持 (提交 9dde8289)
- 添加对
ts_delete()
- 现在允许
NULL
值 (提交 cbe25dcf)
- 现在允许
unnest()
- 添加对
multirange
参数的支持 (提交 9e3c217b)
- 添加对
已移除
pg_backup_start_time()
(提交 39969e2a)pg_is_in_backup()
(提交 39969e2a)pg_start_backup()
被pg_backup_start()
替换 (提交 39969e2a)pg_stop_backup()
被pg_backup_stop()
替换 (提交 39969e2a)
配置更改
一般
- 为显示运行时计算的 GUC 添加 GUC 标志
GUC_RUNTIME_COMPUTED
(提交 0c39c292)
添加
allow_in_place_tablespaces
(提交 7170f215)archive_library
(提交 5ef1eefd)enable_group_by_reordering
(提交 db0d67db) 在提交 f4c7c410 中恢复log_startup_progress_interval
(提交 9ce346ea)recovery_prefetch
(提交 5dc0418f)recursive_worktable_factor
(提交 0bd7af08)shared_memory_size
(提交 bd178805)shared_memory_size_in_huge_pages
(提交 43c1c4f6)stats_fetch_consistency
(提交 5891c7a8)wal_decode_buffer_size
(提交 5dc0418f)
修改
compute_query_id
- 添加
regress
选项 (提交 ebf6c524)
- 添加
data_checksums
- 添加
GUC_RUNTIME_COMPUTED
分类 (提交 0c39c292)
- 添加
data_directory_mode
- 添加
GUC_RUNTIME_COMPUTED
分类 (提交 0c39c292)
- 添加
hash_mem_multiplier
- 默认值更改为
2.0
(提交 8f388f6f)
- 默认值更改为
log_autovacuum_min_duration
- 默认值从
-1
更改为10m
(提交 64da07c4)
- 默认值从
log_checkpoints
- 默认值更改为
on
(提交 64da07c4)
- 默认值更改为
log_destination
- 添加
jsonlog
选项 (dc686681)
- 添加
wal_compression
wal_segment_size
- 添加
GUC_RUNTIME_COMPUTED
分类 (提交 0c39c292)
- 添加
已移除
用户/角色
pg_checkpoint
默认角色 添加 (提交 4168a474 和 b9eb0ff0)pg_read_all_stats
现在可以访问pg_backend_memory_contexts
和pg_shmem_allocations
(提交 77ea4f94)
过程语言更改
PL/Perl
- 现在最低要求版本为 Perl 5.8.3 (提交 92e6a98c)
PL/pgSQL
- 变量
CONSTANT
标记的强制执行得到改进 (提交 ccd10a9b)
PL/Python
- 删除对 Python 2 的支持 (初始提交 19252e8e)
PL/Sample
添加触发器处理程序示例 (提交 2f4d0d67)
复制更改
复制协议
- 使用更灵活的语法修改
BASE_BACKUP
命令 (提交 0ba281cb)
PROGRESS [
(之前不接受布尔值)boolean
]CHECKPOINT { 'fast' | 'spread' }
(取代之前的FAST
选项)WAL [
(之前不接受布尔值)boolean
]WAIT [
(取代之前的boolean
]WAIT
选项)TABLESPACE_MAP [
(之前不接受布尔值)boolean
]VERIFY_CHECKSUMS [
(取代之前的boolean
]NOVERIFY_CHECKSUMS
选项)
- 在
CREATE_REPLICATION_SLOT
中添加TWO_PHASE
选项 (提交 cda03cfe) - 使用更灵活的语法修改
BASE_BACKUP
命令 (提交 0ba281cb) IDENTIFY_SYSTEM
不再需要在START_REPLICATION
之前执行 (提交 8e7811e9)
逻辑复制
- 添加对准备事务的支持 (提交 a8fd13ca)
- 添加对流式准备事务的支持 (提交 63cf61cd)
- 添加对发布模式下发布架构的所有表的支持
(提交 5a283246)
- 添加对行过滤器支持 (提交 52e4f0cd)
- 订阅可以可选地在错误时禁用 (提交 705e20f8)
- 添加对指定单个表列的支持 (提交 923def9a)
- 受 GUC
DateStyle
,IntervalStyle
和extra_float_digits
影响的值的一致逻辑复制强制执行 (提交 f3d4019d) - 添加对逻辑解码序列的支持 (提交 0da92dc5) 通过提交 2c7ea57e 恢复
libpq 更改
- 添加对服务器主题备用名称中的 IPv4 和 IPv6 地址的支持 (提交 c1932e54)
PQcancel()
现在使用PGconn
的tcp_user_timeout
和tcp_keepalives_{count|idle|interval}
设置 (提交 5987feb7)PQsslAttribute(NULL, "library")
返回正在使用的 SSL 库的名称,无需连接句柄(提交 ebc8b7d4)。
核心实用程序
createdb
pg_basebackup
- 实现了新的
COPY
子协议(提交 cc333f32)。 - 添加了选项
-t
/--target
(提交 3500ccc3)。 - 选项
--compress
扩展为接受压缩方法和可选的压缩级别(提交 5c649fe1)。 - 选项
--compress
可以接受client-gzip
或server-gzip
以及gzip
(提交 0ad80329)。 - 选项
--compress
可以接受lz4
或server-lz4
(提交 dab29847)。 - 选项
--compress
可以接受client-lz4
(提交 751b8d23)。 - 选项
--compress
可以接受zstd
、client-zstd
或server-zstd
(提交 7cf085f0)。 - 选项
--compress
可以接受(client|server)-zstd:workers=N
以使用多个 zstd 工作器提供并行备份(提交 51c0d186)。
- 实现了新的
pgbench
pg_dump
pg_dumpall
- 添加了选项
--no-table-access-method
(提交 21586288)。 - 删除了对从早于 PostgreSQL 9.2 的版本转储的支持(提交 30e7c175)。
- 添加了选项
pg_receivewal
pg_recvlogical
- 添加了选项
--two-phase
(提交 cda03cfe)。
- 添加了选项
pg_restore
- 添加了选项
--no-table-access-method
(提交 21586288)。
- 添加了选项
服务器实用程序
initdb
pg_resetwal
- 添加了选项
-u
/--oldest-transaction-id
(提交 74cf7d46)。
- 添加了选项
pg_rewind
- 添加了选项
--config-file
(提交 0d5c3875)。
- 添加了选项
pg_upgrade
pg_waldump
psql
- 新的环境变量
PSQL_WATCH_PAGER
用于为psql
的\watch
命令设置分页器(提交 7c09d279)。 \getenv
斜杠命令 添加(提交 33d3eead)。\lo_list
/\dl
现在显示 大型对象 的 ACL,前提是提供了+
选项(提交 328dfbda)。- 删除了对早于 PostgreSQL 9.2 的版本的支持(提交 cf0cab86)。
- 默认情况下会显示多个查询的结果;添加了变量
SHOW_ALL_RESULTS
来控制此行为(提交 7844c991)。 \copy
的性能得到提升(提交 eec57115)。- 添加了
\dconfig
斜杠命令(提交 3e707fbb)。
Contrib 模块
添加
basebackup_to_shell
(提交 c6306db2)。basic_archive
(提交 5ef1eefd)。pg_walinspect
(提交 2258e76f)。
修改
amcheck
btree_gist
- 添加了
bool
opclass 以允许在boolean
列上创建 GiST 索引(提交 57e3c516)。
- 添加了
pgcrypto
- 现在只有在配置了 OpenSSL 支持的情况下才构建(提交 db7d1a7b)。
postgres_fdw
pg_stat_statements
sepgsql
- 现在在日志消息中包含了许可/强制状态(提交 134d9746)。
test_decoding
- 添加了选项
include-sequences
(提交 80901b32)
- 添加了选项
xml2
- 删除了函数
xml_is_well_formed()
(提交 fd2abeb7)
- 删除了函数
测试更改
TAP 测试
- 将
PostgresNode
和TestLib
Perl 模块移至自定义命名空间PostgreSQL::Test
(b3b4d8e6)
其他
- 添加了对通过 cirrus-ci 进行 GitHub 仓库持续集成的支持(提交 93d97349)
CommitFests
以下是针对 PostgreSQL 15
代码提交的 CommitFest:
CommitFest 37(2022 年 3 月 1 日至 2022 年 3 月 31 日;已关闭)CommitFest 36(2022 年 1 月 1 日至 2022 年 1 月 31 日;已关闭)CommitFest 35(2021 年 11 月 1 日至 2021 年 11 月 30 日;已关闭)CommitFest 34(2021 年 9 月 1 日至 2021 年 9 月 30 日;已关闭)CommitFest 33(2021 年 7 月 1 日至 2021 年 7 月 31 日;已关闭)
请注意,三月份的 CommitFest 通常会在官方截止日期之后持续几天,直到宣布功能冻结,通常在四月的早期。
发布计划和预发布测试版本
rc2
(REL_15_RC2
) - 提交 2a40d040(2022 年 10 月 3 日)rc1
(REL_15_RC1
) - 提交 6abbd212(2022 年 9 月 26 日);公告(2022 年 9 月 29 日):PostgreSQL 15 RC 1 发布!beta4
(REL_15_BETA4
) - 提交 6e55ea79(2022 年 9 月 5 日);公告(2022 年 9 月 8 日):ostgreSQL 15 Beta 4 发布!beta3
(REL_15_BETA3
) - 提交 6778361e(2022 年 8 月 8 日);公告https://postgresql.ac.cn/message-id/170740132495.3279718.8259216676039225646%40wrigleys.postgresql.orgment(2022 年 8 月 11 日):PostgreSQL 14.5、13.8、12.12、11.17、10.22 和 15 Beta 3 发布!beta2
(REL_15_BETA2
) - 提交 c1d033fc(2022 年 6 月 27 日);公告(2022 年 6 月 30 日):PostgreSQL 15 Beta 2 发布!beta1
(REL_15_BETA1
) - 提交 05a5a177(2022 年 5 月 16 日);公告(2022 年 5 月 19 日):PostgreSQL 15 Beta 1 发布!
标记 PostgreSQL 15
开发开始的初始提交是 596b5af1(2021 年 6 月 28 日)。