您将在下面找到有关PostgreSQL 15 和以前的主要版本之间更改的详细说明。
1。服务器
记录并检查每个数据库的整理 (Peter Eisentraut)
这旨在检测排序规则不匹配以避免数据损坏。函数 pg_database_collation_actual_version() 报告底层操作系统排序规则版本,并且 ALTER DATABASE ... REFRESH 设置数据库以匹配操作系统排序规则版本。细节?
允许将 ICU 排序规则设置为集群和数据库的默认值 (Peter Eisentraut)
以前,ICU 排序规则只能在 CREATE COLLATION 中指定并与 COLLATE 子句一起使用。
添加系统视图 pg_ident_file_mappings 以报告 pg_ident.conf 信息 (Julien Rouhaud)
1.1。 分区
改进引用分区表的查询的计划时间 (David Rowley)
具体来说,如果许多分区中只有一小部分是相关的,这会有所帮助。
允许对分区进行有序扫描以避免在更多情况下进行排序 (David Rowley)
以前,具有包含多个值的任何 LIST 分区的分区表不能用于有序分区扫描。现在只检查未修剪的 LIST 分区。这也有助于使用 DEFAULT 分区的分区表。
改进在分区之间移动行的分区表更新的外键行为 (Amit Langote)
以前,此类更新在源分区上运行删除操作并在目标分区上运行插入操作。PostgreSQL 现在将在引用的分区根上运行更新操作。
在分区表上允许 CLUSTER (Justin Pryzby)
修复分区表上的 ALTER TRIGGER RENAME 以正确重命名所有分区的触发器 (Arne Roland, Álvaro Herrera)
还禁止重命名克隆的触发器。
1.2。索引
启用系统和 TOAST B 树索引以有效地存储重复项 (Peter Geoghegan)
以前对这些类型的索引禁用了重复数据删除。
提高使用排序构建的 GiST 索引的查找性能 (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)
防止对仅由 BRIN 索引索引的列的更改禁用 HOT 更新 (Josef Simanek)
允许唯一约束和索引将 NULL 值视为不同的 (Peter Eisentraut)
以前 NULL 值总是被索引为不同的值,但现在可以通过使用 UNIQUE NULLS NOT DISTINCT 创建约束和索引来更改这一点。
如果使用 C 排序规则,则允许 ^@ 和 starts_with() 使用 btree 索引 (Tom Lane)
以前这些只能使用 SP-GiST 索引。
1.3。优化器
允许扩展统计来记录父母及其所有孩子的统计数据(Tomas Vondra,Justin Pryzby)
常规统计数据已经分别跟踪了父母和父母/所有孩子的统计数据。
允许 GROUP BY 排序以优化列顺序 (Dmitry Dolgov, Teodor Sigaev, Tomas Vondra)
可以使用服务器变量 enable_group_by_reordering 禁用此优化。
添加服务器变量 recursive_worktable_factor 以允许用户指定预期的递归查询工作表大小 (Simon Riggs)
什么是工作台?没有定义的。
1.4。一般性能
允许对具有许多常量的 NOT IN 子句进行哈希查找 (David Rowley, James Coleman)
以前,代码总是按顺序扫描值列表。
通过一次处理 16 个字节来改进 UTF-8 文本(即使只有 ASCII)的验证 (John Naylor)
这将改进像 COPY FROM 这样的文本繁重的操作。
提高超过 work_mem 的排序的性能 (Heikki Linnakangas)
具体来说,切换到在内部使用更多输出流的批处理排序算法。
提高性能并减少内存排序的内存消耗(Ronan Dunklau、David Rowley、Thomas Munro、John Naylor)
允许 WAL 整页写入使用 LZ4 和 Zstandard 压缩 (Andrey Borodin, Justin Pryzby)
这由 wal_compression 服务器设置控制。
为 macOS 添加直接 I/O 支持 (Thomas Munro)
这仅在 max_wal_senders=0 和 wal_level=minimal 时有效,并且仅适用于 WAL。
在设置最古老的frozenxid时让真空更具侵略性(Peter Geoghegan)
允许引用多个外部表的查询在更多情况下执行并行外部表扫描(Andrey Lepikhov,Etsuro Fujita)
提高使用 row_number()、rank() 和 count() 的窗口函数的性能 (David Rowley)
提高高核数 ARM64 系统上自旋锁的性能 (Geoffrey Blake)
1.5。监控
启用检查点的默认日志记录和缓慢的 autovacuum 操作 (Bharath Rupireddy)
具体来说,这会将 log_checkpoints 的默认值更改为 on,将 log_autovacuum_min_duration 的默认值更改为 10 分钟。这将导致空闲服务器生成日志输出,这可能会导致资源受限的服务器出现日志文件删除不足的问题。在这种情况下,应更改默认值。
在慢速服务器启动期间生成定期日志消息 (Nitin Jadhav, Robert Haas)
消息报告延迟的原因。通知的时间间隔由新的服务器变量 log_startup_progress_interval 控制。
在共享内存中存储服务器级统计信息(Kyotaro Horiguchi、Andres Freund、Melanie Plageman)
以前,这是通过 UDP 数据包更新的,存储在文件系统中,并由会话读取。不再有统计信息收集器进程。
向 VACUUM VERBOSE 和 autovacuum 日志消息添加附加信息 (Peter Geoghegan)
为临时文件块 I/O 添加 EXPLAIN (BUFFERS) 输出 (Masahiko Sawada)
允许以 JSON 格式输出日志 (Sehrope Sarkuni, Michael Paquier)
新设置是 log_destination=jsonlog。
允许 pg_stat_reset_single_table_counters() 重置所有数据库共享的关系计数器(B Sadhu,Prasad Patro)
为本地 shell 命令添加等待事件(Fujii Masao)
具体来说,新的等待事件与命令 archive_command、archive_cleanup_command、restore_command 和 recovery_end_command 有关。
1.6。特权
允许视图访问由视图用户的权限控制 (Christoph Heiss)
以前,视图访问权限只能基于视图所有者。
允许 pg_write_server_files 预定义角色的成员执行服务器端基本备份 (Dagfinn Ilmari Mannsåker)
以前只有超级用户才能执行此类备份。
允许 GRANT 通过 SET 和 ALTER SYSTEM 分配更改服务器变量的权限 (Mark Dilger)
新函数 has_parameter_privilege() 报告此权限。
添加允许成员运行 CHECKPOINT 的预定义角色 pg_checkpointer (Jeff Davis)
以前检查点只能由超级用户运行。
允许 pg_read_all_stats 预定义角色的成员访问视图 pg_backend_memory_contexts 和 pg_shmem_allocations (Bharath Rupireddy)
以前这些视图只能由超级用户访问。
允许 GRANT 分配对 pg_log_backend_memory_contexts() 的权限 (Jeff Davis)
以前此功能只能由超级用户运行。
1.7。服务器配置
添加服务器变量 shared_memory_size 以报告分配的共享内存的大小 (Nathan Bossart)
添加服务器变量 shared_memory_size_in_huge_pages 以报告所需的大内存页数 (Nathan Bossart)
这仅在 Linux 上受支持。
允许“postgres -C”正确报告运行时计算的值 (Nathan Bossart)
以前运行时计算的值 data_checksums、wal_segment_size 和 data_directory_mode 会报告在运行服务器上不准确的值。但是,这不适用于正在运行的服务器。
2。流式复制和恢复
添加对服务器端基本备份的 LZ4 和 Zstandard 压缩的支持 (Jeevan Ladhe, Robert Haas)
在崩溃恢复期间运行检查点和 bgwriter (Thomas Munro)
允许 WAL 处理预取所需的文件内容 (Thomas Munro)
这由服务器变量 recovery_prefetch 控制。
添加服务器变量 archive_library 以指定要调用的库进行归档 (Nathan Bossart)
以前只能调用 shell 命令来执行归档。
不再需要在 START_REPLICATION 之前运行 IDENTIFY_SYSTEM (Jeff Davis)
1。 逻辑复制
允许发布模式中的所有表 (Vignesh C, Hou Zhijie, Amit Kapila)
例如,现在支持以下语法:CREATE PUBLICATION pub1 FOR ALL TABLES IN SCHEMA s1,s2; ALTER PUBLICATION 支持类似的语法。将来添加到列出的模式中的表也将被复制。
允许使用 WHERE 子句过滤发布内容(侯志杰、Euler Taveira、Peter Smith、Ajin Cherian、Tomas Vondra、Amit Kapila)
允许出版物仅限于特定栏目(Tomas Vondra、Álvaro Herrera、Rahila Syed)
允许使用 ALTER SUBSCRIPTION ... SKIP (Masahiko Sawada) 跳过订阅者上的事务
为内置逻辑复制添加对准备事务的支持(Peter Smith、Ajin Cherian、Amit Kapila、Nikhil Sontakke、Stas Kelvich)
将两阶段信息添加到逻辑复制流 (Ajin Cherian)
新的 CREATE_REPLICATION_SLOT 选项称为 TWO_PHASE。pg_recvlogical 现在在插槽创建期间支持新的 --two-phase 选项。
防止空事务的逻辑复制(Ajin Cherian、侯志杰、Euler Taveira)
以前,如果未修改订阅的表,写入事务将向订阅者发送空事务。
添加 SQL 函数以监控逻辑复制槽的目录内容 (Bharath Rupireddy)
具体来说,函数是 pg_ls_logicalsnapdir()、pg_ls_logicalmapdir() 和 pg_ls_replslotdir()。它们可以由预定义的 pg_monitor 角色的成员运行。
允许订阅者在出错时停止逻辑复制应用程序(Osumi Takamichi,Mark Dilger)
这是通过订阅者选项“disable_on_error”启用的,并避免了流应用期间可能出现的无限错误循环。
调整订阅服务器变量以匹配发布者,以便一致地解释 datetime 和 float8 值(Japin Li)
一些发布者可能依赖于不一致的行为。
添加系统视图 pg_stat_subscription_stats 以报告订阅者活动 (Masahiko Sawada)
新函数 pg_stat_reset_subscription_stats() 允许重置订阅者统计信息。
删除系统视图pg_publication_tables中不正确的重复分区(侯志杰)
3。 SELECT,INSERT
允许并行化 SELECT DISTINCT (David Rowley)
4。实用命令
添加 SQL MERGE 命令以调整一个表以匹配另一个表(Simon Riggs、Pavan Deolasee、Álvaro Herrera、Amit Langote)
这类似于 INSERT ... ON CONFLICT 但更面向批处理。
添加对 COPY 文本格式的 HEADER 选项的支持 (Rémi Lapeyre)
新选项会导致输出列名,并可选择在输入时进行验证。
为数据库创建添加新的默认 WAL 记录方法 (Dilip Kumar)
这避免了在数据库创建期间需要检查点;旧方法仍然可用。
允许 CREATE DATABASE 设置数据库 OID (Shruthi KC, Antonin Houska)
防止 DROP DATABASE、DROP TABLESPACE 和 ALTER DATABASE SET TABLESPACE 在 Windows 上并发使用期间偶尔失败 (Thomas Munro)
允许外键 ON DELETE SET 操作仅影响指定的列 (Paul Martinez)
以前,外键中的所有列都会受到影响。
允许 ALTER TABLE 修改表的 ACCESS METHOD (Justin Pryzby, Jeff Davis)
当 ALTER TABLE 导致表重写时正确调用对象访问挂钩 (Michael Paquier)
5。数据类型
允许数字刻度为负数或大于精度 (Dean Rasheed, Tom Lane)
这允许将值舍入到小数点左侧,例如,'1234'::numeric(4, -2) 返回 1200。
在将值转换为间隔时改进溢出检测 (Joe Koshakow)
允许创建未记录的序列 (Peter Eisentraut)
更新现代 Unicode 字符的显示宽度信息,例如 emojis (Jacob Champion)
也从 Unicode 5.0 更新到 14.0.0。现在有一种自动化方式可以让 Postgres 随 Unicode 版本更新。
6。职能
将多范围输入添加到 range_agg() (Paul Jungwirth)
为 xid8 数据类型添加 min() 和 max() 聚合 (Ken Kato)
添加正则表达式函数以与其他关系系统兼容 (Gilles Darold, Tom Lane)
具体来说,新函数是 regexp_count()、regexp_instr()、regexp_like() 和 regexp_substr()。一些新的可选参数也被添加到 regexp_replace()。
添加计算多边形之间距离的功能 (Tom Lane)
添加 to_char() 格式代码“of”、“tzh”和“tzm”格式代码 (Nitin Jadhav)
已经支持这些的大写版本。
通过稳定交易开始时的值来改进 timetz_zone() 的优化 (Aleksander Alekseev, Tom Lane)
允许 tsvector_delete_arr() 和 tsvector_setweight_by_filter() 接受空数组元素 (Jean-Christophe Arnu)
这些词位没有被存储,因此接受空数组元素不是问题。
向 pg_size_pretty() 和 pg_size_bytes() 添加对 PB 单位的支持 (David Christensen)
更改 pg_event_trigger_ddl_commands() 以使用实际模式名称输出对非本地临时模式的引用 (Tom Lane)
以前,此函数将临时模式称为“pg_temp”。
6.1。JSON
添加 SQL/JSON 标准 JSON 构造函数 (Nikita Glukhov)
构造函数为 JSON()、JSON_SCALAR() 和 JSON_SERIALIZE()、JSON_ARRAY()、JSON_ARRAYAGG()、JSON_OBJECT() 和 JSON_OBJECTAGG()。与现有的 JSON 函数相比,它们具有一些功能优势。
添加 SQL/JSON 查询函数 JSON_EXISTS()、JSON_QUERY() 和 JSON_VALUE() (Nikita Glukhov)
添加 JSON 谓词以测试 JSON/JSONB 值 (Nikita Glukhov)
子句是 IS JSON [ VALUE | 阵列 | 对象 | 标量 | [与 | 没有]唯一键]。
添加 JSON_TABLE 函数以使 JSON 数据被视为表 (Nikita Glukhov)
7。 PL/PgSQL
修复 PL/pgSQL 变量 CONSTANT 标记的强制执行 (Tom Lane)
以前,用作 CALL 输出参数或 refcursor OPEN 变量的变量不会强制执行 CONSTANT。
8。客户端接口
允许 IP 地址与服务器证书的主题备用名称匹配(Jacob Champion)
允许 PQsslAttribute() 报告 SSL 库类型而不需要 libpq 连接 (Jacob Champion)
更改客户端发送的查询取消以使用与普通客户端连接相同的 TCP 设置 (Jelte Fennema)
这允许配置的 TCP 超时应用于查询取消连接。
防止 libpq 事件回调失败强制产生错误结果 (Tom Lane)
9。客户端应用程序
在 Unix 平台上,让 psql 等客户端应用程序在检查操作系统定义之前检查用户主目录的 $HOME (Anders Kaseorg)
9.1。 psql
提高 psql 的 \copy 命令的性能 (Heikki Linnakangas)
添加 psql 命令 \getenv 以将环境变量的值分配给 psql 变量 (Tom Lane)
向 psql 的 \lo_list/\dl 添加 '+' 选项以显示对象权限 (Pavel Luzanov)
添加 psql \dconfig 以报告服务器变量 (Mark Dilger, Tom Lane)
这类似于服务器端 SHOW 命令,但可以处理模式。
为 psql 的 \watch 命令添加寻呼机选项 (Pavel Stehule, Thomas Munro)
这仅在 Unix 上受支持,并由 PSQL_WATCH_PAGER 控制。
让 psql 向服务器发送查询内双连字符注释(Tom Lane,Greg Nancarrow)
以前,此类评论在发送之前已从查询中删除。查询文本之前的双连字符注释不会发送,也不会记录为单独的 psql 历史条目。
调整 psql 的 readline meta-# 以插入双连字符注释标记 (Tom Lane)
以前插入了一个无用的磅标记。
如果一次将多个查询传递到服务器,则让 psql 输出所有结果 (Fabien Coelho)
这可以通过设置 SHOW_ALL_RESULTS 来禁用。
改进 psql 的制表符补全(Shinya Kato、Dagfinn Ilmari Mannsåker、Peter Smith、Koyu Tanigawa、Ken Kato、David Fetter、Haying Tang、Peter Eisentraut、Álvaro Herrera、Tom Lane、Masahiko Sawada)
将 psql 的支持限制在运行 PostgreSQL 9.2 及更高版本的服务器上 (Tom Lane)
10。服务器应用程序
添加新的 pg_basebackup 选项 --target 以控制基本备份位置 (Robert Haas)
新的输出选项是“服务器”以在本地写入备份,“黑洞”以丢弃备份(用于测试)。
允许 pg_basebackup 解压缩 LZ4 和 Zstandard 压缩的服务器端基本备份,并使用 LZ4 和 Zstandard 压缩输出文件 (Dipesh Pandit, Jeevan Ladhe)
允许 pg_basebackup 的 --compress 选项来控制压缩方法和选项 (Michael Paquier, Robert Haas)
新选项包括“server-gzip”(服务器上的 gzip)、“client-gzip”(与“gzip”相同)。
允许 pg_basebackup 在服务器端压缩并在存储前在客户端解压缩 (Dipesh Pandit)
这是通过在服务器端指定压缩和纯输出格式来实现的。
将 LZ4 压缩方法添加到 pg_receivewal (Georgios Kokolatos)
这是通过 --compress=lz4 启用的,并且需要使用 --with-lz4 构建二进制文件。
向 pg_receivewal 的 --compress 选项添加附加功能 (Georgios Kokolatos)
提高 pg_receivewal 在正确的 WAL 位置重新启动的能力 (Ronan Dunklau)
以前,pg_receivewal 将基于存储在本地归档目录中的 WAL 文件或在发送服务器的当前 WAL 刷新位置启动。通过此更改,如果发送服务器运行 Postgres 15 或更高版本,本地存档目录为空,并且指定了复制槽,则将使用复制槽的重新启动点。
允许 pgbench 在序列化和死锁失败后重试 (Yugo Nagata, Marina Polyakova)
10.1。pg_dump
让 pg_dump 转储“公共”模式所有权更改和安全标签 (Noah Misch)
它还转储“公共”模式注释。
提高具有许多对象的转储数据库的性能 (Tom Lane)
这也将提高 pg_upgrade 的性能。
提高 TOAST 表的并行 pg_dump 性能 (Tom Lane)
添加转储/恢复选项 --no-table-access-method 以强制恢复仅使用默认表访问方法 (Justin Pryzby)
将 pg_dump 和 pg_dumpall 的支持限制在运行 PostgreSQL 9.2 及更高版本的服务器上 (Tom Lane)
10.2。pg_upgrade
如果输出不是终端,则在 pg_upgrade 操作期间禁用默认状态报告 (Andres Freund)
可以使用 --verbose 为非 tty 使用启用状态报告输出。
让 pg_upgrade 报告所有连接设置无效的数据库 (Jeevan Ladhe)
以前只报告第一个具有无效连接设置的数据库。
将 pg_upgrade 临时文件存储在名为“pg_upgrade_output”的新集群子目录中。d (Justin Pryzby)
以前的临时文件存储在当前目录中。
让 pg_upgrade 保留新旧集群之间的 relfilenodes、表空间和数据库 OID (Shruthi KC, Antonin Houska)
向 pg_upgrade 添加 --no-sync 选项 (Michael Paquier)
这仅对测试有用。
将 pg_upgrade 的支持限制在运行 PostgreSQL 9.2 及更高版本的旧服务器上 (Tom Lane)
10.3。pg_waldump
允许按关系文件节点、块号、分叉号和整页图像过滤 pg_waldump (David Christensen, Thomas Munro)
在中断退出之前让 pg_waldump 报告统计信息 (Bharath Rupireddy)
例如,在运行“pg_waldump --stats --follow”的终端中发出 control-C 将在退出前报告当前统计信息。这在 Windows 上不起作用。
改进 pg_waldump 报告的一些事务 WAL 记录的描述(Masahiko Sawada,Michael Paquier)
允许 pg_waldump 转储有关多个资源管理器的信息 (Heikki Linnakangas)
这是通过多次指定 --rmgr 选项来启用的。
添加 pg_rewind 选项 --config-file 以在服务器配置文件存储在数据目录之外时简化使用 (Gunnar "Nick" Bluth)
11。文档
添加 pg_encoding_to_char() 和 pg_char_to_encoding() 的文档 (Ian Lawrence Barwick)
为 range_intersect_agg(anymultirange) 添加文档 (Paul Jungwirth)
记录 ^@ 开头的运算符 (Tom Lane)
12。源代码
添加对使用 cirrus-ci 的持续集成测试的支持(Andres Freund、Thomas Munro、Melanie Plageman)
添加配置选项 --with-zstd 以启用 Zstandard 构建(Jeevan Ladhe、Robert Haas、Michael Paquier)
添加可以为非社区 PostgreSQL 发行版定制的模块字段 (Peter Eisentraut)
模块字段不匹配会产生错误。
为“char”创建一个新的 pg_type.typcategory 值 (Tom Lane)
一些仅供内部使用的类型也被分配了这个新的 pg_type.typcategory。
添加新协议消息 TARGET 以指定用于基本备份的新 COPY 方法 (Robert Haas)
修改 pg_basebackup 以使用此方法。
添加新的协议消息 COMPRESSION 和 COMPRESSION_DETAIL 以指定压缩方法和选项 (Robert Haas)
删除对旧 BASE_BACKUP 命令语法和基本备份协议的服务器支持 (Robert Haas)
添加对扩展的支持以设置自定义备份目标 (Robert Haas)
允许扩展定义自己的 WAL 资源管理器 (Jeff Davis)
添加函数 pg_settings_get_flags() 以获取服务器端变量的标志 (Justin Pryzby)
为表空间测试添加服务器变量 allow_in_place_tablespaces (Thomas Munro)
使用 PGDLLIMPORT 导出 Windows 上的所有服务器变量 (Robert Haas)
以前只导出特定变量。
需要 OpenSSL 来构建 pgcrypto 二进制文件 (Peter Eisentraut)
禁止使用 Python 2 构建 (Andres Freund)
调整配置以要求 Perl 版本 5.8.3 或更高版本 (Dagfinn Ilmari Mannsåker)
13。附加模块
添加 contrib/pg_walinspect (Bharath Rupireddy)
这给出了类似于 pg_waldump 的 SQL 级输出。
添加 contrib 模块 basic_archive 以通过库执行归档 (Nathan Bossart)
添加 contrib 模块 'basebackup_to_shell' 作为自定义备份目标 (Robert Haas) contrib 模块。
为临时文件块 I/O 添加 pg_stat_statements 输出(Masahiko Sawada)
将 JIT 计数器添加到 pg_stat_statements (Magnus Hagander)
允许 amcheck 检查序列 (Mark Dilger)
改进对 TOAST 表的 amcheck 健全性检查 (Mark Dilger)
允许布尔列上的 btree_gist 索引 (Emre Hasegeli)
这些可用于排除约束。
在 sepgsql 日志消息中指示允许/强制状态 (Dave Page)
修复 pageinspect 的 page_header() 以处理 32 KB 的页面大小(权宗良)
在某些情况下,可能会返回以前不正确的负值。
13.1。 postgres_fdw
允许 postgres_fdw 下推 CASE 表达式 (Alexander Pyhalov)
添加服务器变量 postgres_fdw.application_name 以控制 postgres_fdw 连接的应用程序名称(Hayato Kuroda)
以前远程 application_name 只能在远程服务器上或通过 postgres_fdw 连接规范设置。postgres_fdw.application_name 还支持自定义转义序列。
允许在 postgres_fdw 服务器上并行提交 (Etsuro Fujita)
这在使用 postgres_fdw 时通过 CREATE SERVER 选项“parallel_commit”启用。
文章来源:https://www.postgresql.org/docs/15/release-15.html#id-1.11.6.5.5




