PostgreSQL 15
- 发布说明 (源文件)
- 发布日期:2022-10-13 (公告)
- 当前小版本:15.14 (2025-08-14)
- EOL:2027-11 (估算)
- 文档:PostgreSQL 15 (索引)
- GIT 分支:REL_15_STABLE
次要版本发布
- 15.14 (2025-08-14; 发布说明; 公告)
- 15.13 (2025-05-08; 发布说明; 公告)
- 15.12 (2025-02-20; 发布说明; 公告)
- 15.11 (2025-02-13; 发布说明; 公告)
- 15.10 (2024-11-21; 发布说明; 公告)
- 15.9 (2024-11-14; 发布说明; 公告)
- 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; 发布说明, 公告)
后端更改
通用
background writer
和checkpointer
现在在崩溃恢复期间也会运行 (提交 7ff23c6d)- 带有尾随非数字字符的数值字面量现在将被拒绝 (提交 2549f066)
- 数据库创建可以在不需要 checkpoint 的情况下执行 (提交 9c08aea6)
- 改进了 PRNG API 和算法 (提交 3804539e)
源配置
- 添加了选项
--with-zstd
(初始提交 6c417bbc)
ABI
- PostgreSQL 分支现在可以显式声明其 ABI 不兼容 (提交 d6d1dfcc)
备份
- 删除了独占备份模式(自 PostgreSQL 9.6 起已弃用)(提交 39969e2a)
执行器
钩子
已添加
已修改
object_access_hook
- 现在在
ALTER TABLE
进行表重写结束时调用 (提交 7b565843)
- 现在在
日志记录
- 添加了过度的 ProcSignalBarrier 等待的日志记录 (提交 0d343149)
- 通过
log_destination
选项jsonlog
添加了 JSON 格式的日志输出 (dc686681)
权限
- 允许将权限授予非超级用户以在单个 GUC 上执行
SET
和ALTER SYSTEM
(提交 a0ffa885)
规划器
postmaster
- 选项
--forkboot
重命名为--forkaux
(提交 50017f77) - 默认情况下,
CREATE
对public
模式的权限现在总是被撤销,并且现在由pg_database_owner
角色拥有 (提交 b073c3cc) - 选项
-C
现在显示运行时计算的 GUCs (提交 0c39c292)
序列
- 添加了未记录的序列 (提交 344d62fb)
统计收集器
- 被共享内存实现取代 (提交 5891c7a8)
vacuum
VACUUM VERBOSE
和autovacuum
操作现在报告relfrozenxid
和relminmxid
如何前进的详细信息 (提交 872770fd)
WAL
- 全页写入可以被压缩
- 添加了对自定义资源管理器(custom resource managers)的支持 (提交 5c279a6d)
- 添加了对 WAL 预取(WAL prefetching)的支持 (提交 5dc0418f)
- 改进了
pg_wal/archive_status
目录扫描的性能 (提交 beb4e9ba)
数据类型更改
通用
- 添加了用于“内部使用”类型的("internal use" types)新类型类别 (提交 07eee5a0)
已修改
JSON
NUMERIC
- 标度(scale)可以是负数或大于精度(precision)(提交 085f931f)
xid
- 添加了对
MIN()
和MAX()
聚合函数(aggregates)的支持 (提交 400fc6b6)
- 添加了对
分区更改
SQL 更改
通用
NULL
值在UNIQUE
约束中的相等性可以通过UNIQUE [ NULLS [ NOT ] DISTINCT ]
选项进行配置 (提交 94aa7cc5)- 添加了
IS JSON
断言 (commit 33a37760) 已撤销 (commit 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 SUBSCRIPTION ... SKIP
语法 (提交 208c5d65) - 添加了参数
disable_on_error
(提交 705e20f8) - 在
ALTER SUBSCRIPTION ... SET PUBLICATION ...
中,如果目标 publication 不存在,现在将发出WARNING
(提交 8f2e2bbf)
- 添加了
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
- 添加了参数
two_phase
(提交 a8fd13ca) - 添加了参数
disable_on_error
(提交 705e20f8) - 在
ALTER SUBSCRIPTION ... SET PUBLICATION ...
中,如果目标 publication 不存在,现在将发出WARNING
(提交 8f2e2bbf)
- 添加了参数
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)pg_stat_force_next_flush()
(提交 0f96965c)regexp_count()
(提交 64243370)regexp_instr()
(提交 64243370)regexp_like()
(提交 64243370)regexp_substr()
(提交 64243370)
已修改
array_to_tsvector()
- 禁止创建空词素(empty lexemes)(提交 cbe25dcf)
pg_encoding_to_char()
- 添加了文档 (提交 f6b5d05b)
pg_log_backend_memory_contexts()
- 可以授予非超级用户执行权限 (提交 f0b051e3)
pg_size_bytes()
- 能够转换 PB(petabytes)为单位的大小 (提交 ca2e4472)
pg_size_pretty()
- 能够输出 PB(petabytes)为单位的大小 (提交 ca2e4472)
pg_stat_reset_shared()
- 添加了选项
recovery_prefetch
(提交 5dc0418f)
- 添加了选项
pg_stat_reset_single_table_counters()
- 现在能够重置集群范围内共享表(cluster-wide shared tables)的统计信息 (提交 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
格式模式(format patterns)的支持 (提交 9dde8289)
- 添加了对
ts_delete()
NULL
值现在允许 (提交 cbe25dcf)
unnest()
- 添加了对
multirange
参数的支持 (提交 9e3c217b)
- 添加了对
移除
pg_backup_start_time()
(提交 39969e2a)pg_is_in_backup()
(提交 39969e2a)- 用
pg_backup_start()
替换了pg_start_backup()
(提交 39969e2a) - 用
pg_backup_stop()
替换了pg_stop_backup()
(提交 39969e2a)
配置更改
通用
- 添加了 GUC 标志
GUC_RUNTIME_COMPUTED
用于显示运行时计算的 GUCs (提交 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) - 执行
START_REPLICATION
不再需要先执行IDENTIFY_SYSTEM
(提交 8e7811e9)
逻辑复制 (Logical replication)
- 添加了对预备事务(prepared transactions)的支持 (提交 a8fd13ca)
- 添加了对流式预备事务(streaming prepared transactions)的支持 (提交 63cf61cd)
- 支持发布模式下的所有表
(提交 5a283246)
- 添加了行过滤器(row filters)的支持 (提交 52e4f0cd)
- 订阅可以根据错误选择性地禁用 (提交 705e20f8)
- 添加了指定单个表列的支持 (提交 923def9a)
- 强制对受 GUC
DateStyle
、IntervalStyle
和extra_float_digits
影响的值进行一致的逻辑复制 (提交 f3d4019d) - 添加了对序列(sequences)的逻辑解码支持 (提交 0da92dc5) 在提交 2c7ea57e 中已回滚)
libpq 更改
- 添加了对服务器主题备用名称(Subject Alternative Names)中 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 worker 的并行备份 (提交 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
- 添加了选项
-N
/--no-sync
(提交 3d5ffccb) - 保留了 filenode 和 tablespace 的 OID (提交 9a974cbc)
- 保留了 postgres 和 template0 数据库的 OID (提交 aa010514)
pg_upgrade
生成的文件现在将存储在升级后的集群的数据目录下,位于pg_upgrade_output.d
下 (提交 38bfae36)- 现在将列出所有无法连接的数据库 (提交 26ebb0e2)
- 如果输出不是 tty,则不发出进度状态 (提交 27b02e07)
- 移除了从 PostgreSQL 9.2 之前的版本升级的支持 (提交 e469f0aa)
- 添加了选项
pg_waldump
psql
- 新的环境变量
PSQL_WATCH_PAGER
用于设置psql
的\watch
命令的分页器 (提交 7c09d279) - 添加了
\getenv
斜杠命令 (提交 33d3eead) \lo_list
/\dl
在提供+
选项时现在显示 大对象 的 ACLs (提交 328dfbda)- 移除了对 PostgreSQL 9.2 之前版本(pre-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 测试
- Perl 模块
PostgresNode
和TestLib
已移至自定义命名空间PostgreSQL::Test
(b3b4d8e6)
其他
- 通过 cirrus-ci 添加了对 github 存储库的持续集成支持 (提交 93d97349)
CommitFests
以下 CommitFests 是为 PostgreSQL 15
的代码提交准备的
CommitFest 37 (2022-03-01 - 2022-03-31; 已关闭)CommitFest 36 (2022-01-01 - 2022-01-31; 已关闭)CommitFest 35 (2021-11-01 - 2021-11-30; 已关闭)CommitFest 34 (2021-09-01 - 2021-09-30; 已关闭)CommitFest 33 (2021-07-01 - 2021-07-31; 已关闭)
请注意,三月的 CommitFest 通常会在官方结束日期后几天保持开放,直到宣布功能冻结(feature freeze),通常在四月初。
发布计划和预发布测试版本
rc2
(REL_15_RC2
) - commit 2a40d040 (2022-10-03)rc1
(REL_15_RC1
) - commit 6abbd212 (2022-09-26); announcement (2022-09-29): PostgreSQL 15 RC 1 Released!beta4
(REL_15_BETA4
) - commit 6e55ea79 (2022-09-05); announcement (2022-09-08): ostgreSQL 15 Beta 4 Released!beta3
(REL_15_BETA3
) - commit 6778361e (2022-08-08); announcehttps://postgresql.ac.cn/message-id/170740132495.3279718.8259216676039225646%40wrigleys.postgresql.orgment (2022-08-11): PostgreSQL 14.5, 13.8, 12.12, 11.17, 10.22, and 15 Beta 3 Released!beta2
(REL_15_BETA2
) - commit c1d033fc (2022-06-27); announcement (2022-06-30): PostgreSQL 15 Beta 2 Released!beta1
(REL_15_BETA1
) - commit 05a5a177 (2022-05-16); announcement (2022-05-19): PostgreSQL 15 Beta 1 Released!
标志着 PostgreSQL 15
开发开始的初始提交是 596b5af1 (2021-06-28)。