E.25. 发布版本 14 #
发布日期:. 2021-09-30
E.25.1. 概述 #
PostgreSQL 14 包含许多新特性和增强功能,包括:
存储过程现在可以通过
OUT参数返回数据。已实现公共表表达式的 SQL 标准
SEARCH和CYCLE选项。下标运算现在可以应用于任何下标记法有意义的数据类型,而不仅仅是数组。在此版本中,
jsonb和hstore类型增加了下标操作符。范围类型已通过增加多范围类型进行扩展,允许表示非连续的数据范围。
对并行查询、高并发工作负载、分区表、逻辑复制和清理进行了大量性能改进。
B-树索引更新管理更加高效,减少了索引膨胀。
如果数据库开始接近事务 ID 回卷条件,
VACUUM会自动变得更加积极,并跳过非必要的清理。扩展统计信息现在可以收集表达式上的统计,从而对复杂查询获得更好的规划结果。
libpq 现在具有管道化多个查询的能力,这可以在高延迟连接上提高吞吐量。
上述项目和 PostgreSQL 14 的其他新特性在下面的章节中有更详细的说明。
E.25.2. 迁移到版本 14 #
对于希望从任何以前的版本迁移数据的人来说,需要使用 pg_dumpall 进行转储/恢复,或者使用 pg_upgrade 或逻辑复制。有关迁移到新主要版本的通用信息,请参阅第 19.6 节。
版本 14 包含许多可能影响与先前版本兼容性的变更。请注意以下不兼容性:
引用某些内置数组函数及其参数类型的用户定义对象必须重新创建(Tom Lane)§
具体来说,
array_append()、array_prepend()、array_cat()、array_position()、array_positions()、array_remove()、array_replace()和width_bucket()以前接受anyarray参数,但现在接受anycompatiblearray。因此,引用这些数组函数签名的用户定义对象(如聚合和操作符)必须在升级前删除,并在升级完成后重新创建。移除内置几何数据类型和 contrib 模块 cube、hstore、intarray 和 seg 中已弃用的包含操作符
@和~(Justin Pryzby)§ §更一致命名的
<@和@>已被推荐使用多年。修复
to_tsquery()和websearch_to_tsquery()以正确解析包含丢弃标记的查询文本(Alexander Korotkov)§某些丢弃标记(如下划线)会导致这些函数产生不正确的 tsquery 输出,例如,
websearch_to_tsquery('"pg_class pg"')和to_tsquery('pg_class <-> pg')以前都输出( 'pg' & 'class' ) <-> 'pg',但现在都输出'pg' <-> 'class' <-> 'pg'。修复
websearch_to_tsquery()以正确解析引号中多个相邻丢弃标记(Alexander Korotkov)§以前,包含多个相邻丢弃标记的引号文本被视为多个标记,导致不正确的 tsquery 输出,例如,
websearch_to_tsquery('"aaa: bbb"')以前输出'aaa' <2> 'bbb',但现在输出'aaa' <-> 'bbb'。将
EXTRACT()的返回类型从float8改为numeric(Peter Eisentraut)§这避免了某些用法中的精度损失问题。旧的行为仍可通过使用底层函数
date_part()获得。此外,
EXTRACT(date)现在对不属于date数据类型的单位会抛出错误。当输入为单个 NaN 值时,将带有 numeric 参数的
var_samp()和stddev_samp()改为返回 NULL(Tom Lane)§以前返回
NaN。当使用属性编号检查不存在或已删除的列时,
has_column_privilege()返回 false(Joe Conway)§以前这样的属性编号会返回无效列错误。
以前像
'inf' PRECEDING AND 'inf' FOLLOWING这样的窗口帧子句会返回不正确的结果。移除阶乘操作符
!和!!,以及函数numeric_fac()(Mark Dilger)§factorial()函数仍然受支持。禁止对负数使用
factorial()(Peter Eisentraut)§以前这种情况返回 1。
移除对后缀(右一元)操作符的支持(Mark Dilger)§
pg_dump 和 pg_upgrade 在导出后缀操作符时会发出警告。
在正则表达式换行敏感模式下,允许
\D和\W简写匹配换行符(Tom Lane)§以前它们在此模式下不匹配换行符,但这与其他常见正则表达式引擎的行为不一致。可以使用
[^[:digit:]]或[^[:word:]]获得旧的行为。例如,在
(^\d+).*\1中,^约束应在字符串开头应用,但在匹配\1时不应应用。禁止在正则表达式字符类中使用
\w作为范围起点或终点(Tom Lane)§以前这是允许的,但产生了意外的结果。
将 password_encryption 服务器参数的默认值改为
scram-sha-256(Peter Eisentraut)§以前默认值为
md5。除非更改此服务器设置或密码以 MD5 格式指定,否则所有新密码将以 SHA256 存储。此外,以前作为md5同义词的旧式(未记录的)布尔型值不再被接受。移除服务器参数
vacuum_cleanup_index_scale_factor(Peter Geoghegan)§ §此设置从 PostgreSQL 版本 13.3 起就被忽略了。
移除服务器参数
operator_precedence_warning(Tom Lane)§此设置用于警告应用程序关于 PostgreSQL 9.5 的变更。
改进
pg_hba.conf中clientcert的规范(Kyotaro Horiguchi)§不再支持值
1/0/no-verify;只能使用字符串verify-ca和verify-full。此外,如果启用了 cert 认证,则禁止使用verify-ca,因为 cert 要求verify-full检查。移除对 SSL 压缩的支持(Daniel Gustafsson,Michael Paquier)§ §
在之前的 PostgreSQL 版本中这已默认禁用,而且大多数现代 OpenSSL 和 TLS 版本不再支持它。
移除服务器和 libpq 对版本 2 线路协议的支持(Heikki Linnakangas)§
这最后一次作为默认值是在 PostgreSQL 7.3(2002 年发布)中。
禁止在
CREATE/DROP LANGUAGE命令中对语言名称使用单引号(Peter Eisentraut)§正确处理 ecpg SQL 命令字符串中的双引号标记(Tom Lane)§ §
以前
'abc''def'会被传递给服务器为'abc'def',而"abc""def"会被传递为"abc"def",导致语法错误。防止 intarray 的包含操作符(
<@和@>)使用 GiST 索引(Tom Lane)§以前需要完整的 GiST 索引扫描,所以改为直接扫描堆,这样更快。为此目的创建的索引应被移除。
移除 contrib 程序 pg_standby(Justin Pryzby)§
防止 tablefunc 中的函数
normal_rand()接受负值(Ashutosh Bapat)§负值会产生不良结果。
E.25.3. 变更 #
以下是 PostgreSQL 14 与上一个主版本之间变更的详细说明。
E.25.3.1. 服务器 #
增加预定义角色
pg_read_all_data和pg_write_all_data(Stephen Frost)§这些非登录角色可用于授予对所有表、视图和序列的读或写权限。
增加预定义角色
pg_database_owner,其仅包含当前数据库的所有者(Noah Misch)§这在模板数据库中特别有用。
在后端崩溃后删除临时文件(Euler Taveira)§
以前,此类文件为调试目的而被保留。如有必要,可通过新的服务器参数 remove_temp_files_after_crash 禁用删除。
允许在客户端断开连接时取消长时间运行的查询(Sergey Cherkashin,Thomas Munro)§
服务器参数 client_connection_check_interval 允许控制是否在查询执行期间检查连接丢失。(这在 Linux 和少数其他操作系统上受支持。)
为
pg_terminate_backend()增加可选的超时参数(Magnus Hagander)§允许宽元组始终被添加到几乎为空的堆页面中(John Naylor,Floris van Nee)§
以前,插入会超过页面填充因子的元组会被添加到新页面中。
在 SSL 连接数据包中增加服务器名称指示(SNI)(Peter Eisentraut)§
可通过关闭客户端连接选项
sslsni来禁用此功能。
允许 vacuum 在可移除的索引条目数量不显著时跳过索引清理(Masahiko Sawada,Peter Geoghegan)§ §
vacuum 参数
INDEX_CLEANUP有一个新的默认值auto来启用此优化。允许 vacuum 更积极地将已删除的 B-树页面添加到空闲空间映射中(Peter Geoghegan)§
以前的清理只能将此前清理标记为已删除的页面添加到空闲空间映射中。
允许 vacuum 回收未使用的尾部堆行指针所占用的空间(Matthias van de Meent,Peter Geoghegan)§
允许 vacuum 在最小锁定索引操作期间更积极地删除死行(Álvaro Herrera)§ § §
具体来说,
CREATE INDEX CONCURRENTLY和REINDEX CONCURRENTLY不再限制其他关系的死行移除。加速具有许多关系的数据库的清理(Tatsuhito Kasahara)§
降低 vacuum_cost_page_miss 的默认值以更好地反映当前硬件能力(Peter Geoghegan)§
增加跳过 TOAST 表清理的能力(Nathan Bossart)§
VACUUM现在有一个PROCESS_TOAST选项,可设置为 false 以禁用 TOAST 处理,而 vacuumdb 有一个--no-process-toast选项。使
COPY FREEZE适当地更新页面可见性位(Anastasia Lubennikova,Pavan Deolasee,Jeff Janes)§当表接近 xid 或 multixact 回卷时,使 vacuum 操作更加积极(Masahiko Sawada,Peter Geoghegan)§
增加事务 ID 和多事务回卷之前的警告时间和硬限制(Noah Misch)§
这应该减少在未发出回卷警告的情况下发生故障的可能性。
在 autovacuum 日志输出中增加每索引信息(Masahiko Sawada)§
E.25.3.1.3. 索引 #
E.25.3.1.4. 优化器 #
允许对包含许多常量的
IN子句使用 hash 查找(James Coleman,David Rowley)§以前代码总是顺序扫描值列表。
允许对表达式创建扩展统计信息(Tomas Vondra)§
这允许对一组表达式和列创建统计信息,而不是像以前那样只能针对列。系统视图
pg_stats_ext_exprs报告此类统计信息。允许对
TID范围进行高效的堆扫描(Edmund Horner,David Rowley)§以前非等值
TID规范需要顺序扫描。修复
EXPLAIN CREATE TABLE AS和EXPLAIN CREATE MATERIALIZED VIEW以遵守IF NOT EXISTS(Bharath Rupireddy)§以前,如果对象已存在,
EXPLAIN会失败。
E.25.3.1.5. 一般性能 #
在具有许多 CPU 和高会话数的系统上提高计算 MVCC 可见性快照的速度(Andres Freund)§ § § § § §
这也提高了有许多空闲会话时的性能。
增加执行器方法以缓存嵌套循环连接内侧的结果(David Rowley)§
如果仅检查内侧的一小部分行,这很有用。可通过服务器参数 enable_memoize 禁用。
改进并行顺序扫描的 I/O 性能(Thomas Munro,David Rowley)§
这通过将块分组分配给并行工作进程来实现。
允许引用多个外部表的查询并行执行外部表扫描(Robert Haas,Kyotaro Horiguchi,Thomas Munro,Etsuro Fujita)§
如果设置了
async_capable,postgres_fdw 支持这种类型的扫描。这由 maintenance_io_concurrency 控制。
大幅提高 Unicode 规范化性能(John Naylor)§ §
这加快了
normalize()和IS NORMALIZED的速度。增加对 TOAST 数据使用 LZ4 压缩的能力(Dilip Kumar)§
这可以在列级别设置,或通过服务器参数 default_toast_compression 设为默认值。服务器必须使用
--with-lz4编译才能支持此功能。默认设置仍为 pglz。
E.25.3.1.6. 监控 #
如果启用了服务器参数 compute_query_id,在
pg_stat_activity、EXPLAIN VERBOSE、csvlog 中显示查询 ID,以及可选地在 log_line_prefix 中显示(Julien Rouhaud)§ § § § §由扩展计算的查询 ID 也将被显示。
改进自动清理和自动分析的日志记录(Stephen Frost,Jakub Wartak)§
如果启用了 track_io_timing,则报告自动清理和自动分析的 I/O 时间。同时报告自动分析的缓冲区读取和脏化速率。
在 log_connections 的输出中增加客户端提供的原始用户名信息(Jacob Champion)§
E.25.3.1.7. 系统视图 #
增加系统视图
pg_stat_progress_copy以报告COPY进度(Josef Šimánek,Matthias van de Meent)§ §增加系统视图
pg_stat_wal以报告 WAL 活动(Masahiro Ikeda)§ § §增加系统视图
pg_stat_replication_slots以报告复制槽活动(Masahiko Sawada,Amit Kapila,Vignesh C)§ § § §函数
pg_stat_reset_replication_slot()可重置槽统计信息。增加系统视图
pg_backend_memory_contexts以报告会话内存使用情况(Atsushi Torikoshi,Fujii Masao)§ §增加函数
pg_log_backend_memory_contexts()以输出任意后端的内存上下文(Atsushi Torikoshi)§在
pg_stat_database系统视图中增加会话统计信息(Laurenz Albe)§在
pg_prepared_statements中增加报告通用和自定义计划计数的列(Atsushi Torikoshi,Kyotaro Horiguchi)§使归档进程在
pg_stat_activity中可见(Kyotaro Horiguchi)§增加等待事件
WalReceiverExit以报告 WAL 接收器退出等待时间(Fujii Masao)§实现信息模式视图
routine_column_usage以跟踪函数和过程默认表达式引用的列(Peter Eisentraut)§
E.25.3.1.8. 认证 #
允许匹配 SSL 证书的专有名称(DN)用于客户端证书认证(Andrew Dunstan)§
新的
pg_hba.conf选项clientname=DN允许与CN以外的证书属性进行比较,并可与 ident 映射组合使用。允许
pg_hba.conf和pg_ident.conf记录跨越多行(Fabien Coelho)§行末的反斜杠允许记录内容续到下一行。
允许指定证书吊销列表(CRL)目录(Kyotaro Horiguchi)§
这由服务器参数 ssl_crl_dir 和 libpq 连接选项 sslcrldir 控制。以前只能指定单个 CRL 文件。
允许任意长度的密码(Tom Lane,Nathan Bossart)§
E.25.3.1.9. 服务器配置 #
增加服务器参数 idle_session_timeout 以关闭空闲会话(Li Japin)§
将 checkpoint_completion_target 的默认值改为 0.9(Stephen Frost)§
之前的默认值为 0.5。
允许在 log_line_prefix 中使用
%P来报告并行工作进程的并行组领导者 PID(Justin Pryzby)§允许 unix_socket_directories 以单独的、逗号分隔的引号字符串指定路径(Ian Lawrence Barwick)§
以前所有路径必须在一个引号字符串中。
允许在启动时分配动态共享内存(Thomas Munro)§
这由 min_dynamic_shared_memory 控制。这允许更多地使用大页面。
增加服务器参数 huge_page_size 以控制 Linux 上使用的大页面大小(Odin Ugedal)§
E.25.3.2. 流复制与恢复 #
允许在服务器重载时更改 restore_command 设置(Sergei Kornilov)§
你也可以将
restore_command设置为空字符串并重载,以强制恢复仅从pg_wal目录读取。增加服务器参数 log_recovery_conflict_waits 以报告长时间的恢复冲突等待(Bertrand Drouvot,Masahiko Sawada)§ §
当主库以阻止备库重放的方式更改参数时,暂停热备库上的恢复(Peter Eisentraut)§
以前备库会立即关闭。
增加函数
pg_get_wal_replay_pause_state()以报告恢复状态(Dilip Kumar)§它比
pg_is_wal_replay_paused()提供更详细的信息,后者仍然存在。增加新的只读服务器参数 in_hot_standby(Haribabu Kommi,Greg Nancarrow,Tom Lane)§
这允许客户端轻松检测是否连接到热备库。
在具有大量共享缓冲区的集簇上加速恢复期间小表的截断(Kirk Jamison)§
允许在 Linux 上崩溃恢复开始时进行文件系统同步(Thomas Munro)§
默认情况下,PostgreSQL 在崩溃恢复开始时打开并 fsync 数据库集簇中的每个数据文件。新设置 recovery_init_sync_method
=syncfs改为同步集簇使用的每个文件系统。这允许在具有许多数据库文件的系统上更快地恢复。增加函数
pg_xact_commit_timestamp_origin()以返回指定事务的提交时间戳和复制来源(Movead Li)§在
pg_last_committed_xact()返回的记录中增加复制来源(Movead Li)§允许使用标准函数权限控制来控制复制来源函数(Martín Marqués)§
以前这些函数只能由超级用户执行,这仍然是默认值。
允许逻辑复制将长时间进行中的事务流式传输给订阅者(Dilip Kumar,Amit Kapila,Ajin Cherian,Tomas Vondra,Nikhil Sontakke,Stas Kelvich)§ § § §
以前超过 logical_decoding_work_mem 的事务会被写入磁盘直到事务完成。
增强逻辑复制 API 以允许流式传输大型进行中事务(Tomas Vondra,Dilip Kumar,Amit Kapila)§
输出函数以
stream开头。test_decoding 也支持这些。允许逻辑复制中表同步期间的多个事务(Peter Smith,Amit Kapila,Takamichi Osumi)§
立即将子事务和顶层
XID关联写入 WAL 日志(Tomas Vondra,Dilip Kumar,Amit Kapila)§这对逻辑解码有用。
增强逻辑解码 API 以处理两阶段提交(Ajin Cherian,Amit Kapila,Nikhil Sontakke,Stas Kelvich)§ § §
在使用逻辑复制时,在命令完成时向 WAL 添加缓存失效消息(Dilip Kumar,Tomas Vondra,Amit Kapila)§
这允许逻辑流式传输进行中的事务。当逻辑复制被禁用时,失效消息仅在事务完成时生成。
允许逻辑解码更高效地处理缓存失效消息(Dilip Kumar)§
这允许逻辑解码在存在大量 DDL 的情况下高效工作。
允许控制逻辑解码消息是否发送到复制流(David Pirotte,Euler Taveira)§
允许逻辑复制订阅使用二进制传输模式(Dave Cramer)§
这比文本模式更快,但略微不那么健壮。
允许逻辑解码按 xid 过滤(Markus Wanner)§
减少不使用
AS就不能用作列标签的关键字数量(Mark Dilger)§现在受限关键字减少了 90%。
允许为
JOIN的USING子句指定别名(Peter Eisentraut)§别名通过在
USING子句后写AS来创建。它可用作合并的USING列的表限定。允许将
DISTINCT添加到GROUP BY以移除重复的GROUPING SET组合(Vik Fearing)§例如,
GROUP BY CUBE (a,b), CUBE (b,c)在没有DISTINCT的情况下会生成重复的分组组合。正确处理
INSERT中多行VALUES列表中的DEFAULT条目(Dean Rasheed)§此类情况以前会抛出错误。
为公共表表达式增加 SQL 标准的
SEARCH和CYCLE子句(Peter Eisentraut)§ §使用现有语法也可以达到相同的结果,但远没有这么方便。
允许
ON CONFLICT的WHERE子句中的列名使用表限定(Tom Lane)§但是,只能引用目标表。
E.25.3.4. 工具命令 #
允许
REFRESH MATERIALIZED VIEW使用并行执行(Bharath Rupireddy)§允许
REINDEX更改新索引的表空间(Alexey Kondratov,Michael Paquier,Justin Pryzby)§ §这通过指定
TABLESPACE子句来完成。reindexdb 也增加了--tablespace选项来控制此功能。允许
REINDEX处理分区关系的所有子表或索引(Justin Pryzby,Michael Paquier)§允许使用
CONCURRENTLY的索引命令避免等待其他使用CONCURRENTLY的操作完成(Álvaro Herrera)§ § §在视图定义中保留 SQL 定义函数的 SQL 标准语法(Tom Lane)§
以前,对 SQL 标准函数(如
EXTRACT())的调用以普通函数调用语法显示。现在显示视图或规则时会保留原始语法。为
GRANT和REVOKE增加 SQL 标准的GRANTED BY子句(Peter Eisentraut)§为
CREATE TRIGGER增加OR REPLACE选项(Takamichi Osumi)§这允许有条件地替换已存在的触发器。
允许
TRUNCATE操作外部表(Kazutaka Onishi,Kohei KaiGai)§postgres_fdw 模块现在也支持此功能。
允许更方便地向订阅中添加和从中移除发布(Japin Li)§
新语法为
ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。这避免了需要指定所有发布来添加/移除条目。为系统目录增加主键、唯一约束和外键(Peter Eisentraut)§ §
这些更改帮助 GUI 工具分析系统目录。目录现有的唯一索引现在具有关联的
UNIQUE或PRIMARY KEY约束。外键关系实际上并未作为约束存储或实现,但可通过函数 pg_get_catalog_foreign_keys() 获取以供显示。在接受
CURRENT_USER的每个地方都允许CURRENT_ROLE(Peter Eisentraut)§
E.25.3.5. 数据类型 #
允许扩展和内置数据类型实现下标运算(Dmitry Dolgov)§
以前下标处理是在服务器中硬编码的,因此下标运算只能应用于数组类型。此更改允许对任何有意义的类型使用下标记法来提取或赋值部分值。
允许对
JSONB使用下标运算(Dmitry Dolgov)§ § §JSONB下标运算可用于提取和赋值JSONB文档的部分内容。增加对多范围数据类型的支持(Paul Jungwirth,Alexander Korotkov)§ § § §
这类似于范围数据类型,但允许指定多个有序、不重叠的范围。每个范围类型都会自动创建一个关联的多范围类型。
增加对亚美尼亚语、巴斯克语、加泰罗尼亚语、印地语、塞尔维亚语和意第绪语的词干化支持(Peter Eisentraut)§ § §
允许 tsearch 数据文件具有无限行长度(Tom Lane)§
之前的限制为 4K 字节。同时移除函数
t_readline()。增加对 numeric 数据类型中
Infinity和-Infinity值的支持(Tom Lane)§浮点数据类型已经支持这些值。
增加点操作符
<<|和|>>表示严格在上方/下方测试(Emre Hasegeli)§以前这些叫做
>^和<^,但该命名与其他几何数据类型不一致。旧名称仍然可用,但将来可能被移除。为系统目录创建复合数组类型(Wenjing Zeng)§
用户定义的关系长期以来就有关联的复合类型,也有这些复合类型上的数组类型。系统目录现在也是如此。此更改还修复了在单用户模式下创建用户定义表时无法创建复合数组类型的不一致性。
E.25.3.6. 函数 #
允许 SQL 语言函数和过程使用 SQL 标准函数体(Peter Eisentraut)§
以前仅支持字符串字面量函数体。以 SQL 标准语法编写函数或过程时,函数体会被立即解析并存储为解析树。这允许更好地跟踪函数依赖关系,并具有安全优势。
允许某些数组函数在兼容数据类型的组合上操作(Tom Lane)§
函数
array_append()、array_prepend()、array_cat()、array_position()、array_positions()、array_remove()、array_replace()和width_bucket()现在接受anycompatiblearray而不是anyarray参数。这使它们对参数类型的精确匹配要求更低。增加 SQL 标准的
trim_array()函数(Vik Fearing)§使用数组切片也可以实现此功能,但不那么方便。
在
split_part()中支持负索引(Nikhil Benesch)§负值从最后一个字段开始向前计数。
增加
string_to_table()函数以按分隔符拆分字符串(Pavel Stehule)§这类似于
regexp_split_to_table()函数。增加
unistr()函数以允许在字符串中以反斜杠十六进制转义形式指定 Unicode 字符(Pavel Stehule)§这类似于在字面量字符串中指定 Unicode 的方式。
增加函数
bit_count()以返回位或字节字符串中设置的位数(David Fetter)§增加
date_bin()函数(John Naylor)§ §此函数将输入时间戳进行“分箱”,将它们分组到与指定原点对齐的均匀长度的区间中。
允许
make_timestamp()/make_timestamptz()接受负年份(Peter Eisentraut)§负值被解释为
BC年。增加更新的正则表达式
substring()语法(Peter Eisentraut)§新的 SQL 标准语法为
SUBSTRING(text SIMILAR pattern ESCAPE escapechar)。之前的标准语法SUBSTRING(text FROM pattern FOR escapechar)仍被 PostgreSQL 接受。增加
[[:word:]]作为正则表达式字符类,等同于\w(Tom Lane)§使非零浮点值除以无穷大返回零(Kyotaro Horiguchi)§
以前此类操作产生下溢错误。
使浮点 NaN 除以零返回 NaN(Tom Lane)§
以前这返回一个错误。
使
exp()和power()在负无穷大指数时返回零(Tom Lane)§ § §以前它们经常返回下溢错误。
改进涉及无穷大的几何计算的精度(Tom Lane)§
尽可能将内置类型转换函数标记为防泄漏(Tom Lane)§
这允许在安全敏感情况下更多地使用需要类型转换的函数。
改变
pg_describe_object()、pg_identify_object()和pg_identify_object_as_address(),使其始终为不存在的对象报告有用的错误消息(Michael Paquier)§
E.25.3.8. 客户端接口 #
为 libpq 增加管道模式(Craig Ringer,Matthieu Garrigues,Álvaro Herrera)§
这允许发送多个查询,仅在发送特定同步消息时等待完成。
增强 libpq 的
target_session_attrs参数选项(Haribabu Kommi,Greg Nancarrow,Vignesh C,Tom Lane)§ §新选项为
read-only、primary、standby和prefer-standby。允许将 ECPG SQL 标识符链接到特定连接(Hayato Kuroda)§
这通过
DECLARE ... STATEMENT完成。
E.25.3.9. 客户端应用 #
允许 vacuumdb 跳过索引清理和截断(Nathan Bossart)§
选项为
--no-index-cleanup和--no-truncate。允许 pg_dump 仅导出特定扩展(Guillaume Lelarge)§
这由选项
--extension控制。增加 pgbench 的
permute()函数以随机打乱值(Fabien Coelho,Hironobu Suzuki,Dean Rasheed)§在 pgbench 使用
-C选项测量的重连开销中包含断开连接时间(Yugo Nagata)§允许多次指定详细选项(
-v)以增加日志详细程度(Tom Lane)§pg_dump、pg_dumpall 和 pg_restore 支持此行为。
允许 psql 的
\df和\do命令指定函数和操作符参数类型(Greg Sabino Mullane,Tom Lane)§这有助于减少重载名称打印的匹配数。
在 psql 的
\d[i|m|t]+输出中增加访问方法列(Georgios Kokolatos)§允许 psql 的
\dt和\di显示 TOAST 表及其索引(Justin Pryzby)§增加 psql 命令
\dX以列出扩展统计对象(Tatsuro Yamada)§修复 psql 的
\dT以理解数组语法和后端语法别名,如int代替integer(Greg Sabino Mullane,Tom Lane)§当使用 psql 的
\e编辑之前的查询或文件,或使用\ef和\ev时,如果编辑器未保存就退出则忽略结果(Laurenz Albe)§以前,这种编辑会将之前的查询加载到查询缓冲区中,并且通常会立即执行。这被认为可能不是用户想要的。
改进 Tab 补全(Vignesh C,Michael Paquier,Justin Pryzby,Georgios Kokolatos,Julien Rouhaud)§ § § § § § § § § § § § § § § § § §
E.25.3.10. 服务器应用 #
增加命令行工具 pg_amcheck 以简化在多个关系上运行
contrib/amcheck测试(Mark Dilger)§为 initdb 增加
--no-instructions选项(Magnus Hagander)§这会抑制通常打印的服务器启动说明。
停止 pg_upgrade 创建
analyze_new_cluster脚本(Magnus Hagander)§取而代之的是给出类似的 vacuumdb 说明。
移除对 postmaster
-o选项的支持(Magnus Hagander)§此选项是不必要的,因为所有传递的选项都已经可以直接指定。
E.25.3.11. 文档 #
增加
factorial()函数的文档(Peter Eisentraut)§随着此版本移除了 ! 操作符,
factorial()是计算阶乘的唯一内置方式。
E.25.3.12. 源代码 #
增加 configure 选项
--with-ssl={openssl}以允许将来选择要使用的 SSL 库(Daniel Gustafsson,Michael Paquier)§保留
--with-openssl拼写以兼容。增加对抽象 Unix 域套接字的支持(Peter Eisentraut)§
目前在 Linux 和 Windows 上受支持。
允许 Windows 正确处理大于 4GB 的文件(Juan José Santamaría Flecha)§
增加服务器参数 debug_discard_caches 以控制用于测试目的的缓存刷新(Craig Ringer)§ § §
以前此行为只能在编译时设置。要在 initdb 期间调用它,使用新选项
--discard-caches。增加正则表达式包的测试模块(Tom Lane)§
增加对 LLVM 版本 12 的支持(Andres Freund)§
将 SHA1、SHA2 和 MD5 hash 计算改为使用 OpenSSL EVP API(Michael Paquier)§ § § §
这更加现代并支持 FIPS 模式。
移除对随机数生成器选择的单独构建时控制(Daniel Gustafsson)§
现在始终由 SSL 库的选择决定。
增加 EUC_TW 和 Big5 编码之间的直接转换例程(Heikki Linnakangas)§
增加 FreeBSD 的排序规则版本支持(Thomas Munro)§
在索引访问方法 API 中增加
amadjustmembers(Tom Lane)§这允许索引访问方法在创建新操作符类或族时提供有效性检查。
在
libpq-fe.h中提供最近添加的 libpq 功能的特性测试宏(Tom Lane,Álvaro Herrera)§历史上,应用程序通常使用
PG_VERSION_NUM的编译时检查来测试功能是否可用。但那通常是服务器版本,可能不能很好地指导 libpq 的版本。libpq-fe.h现在提供#define符号表示 v14 中添加的应用程序可见功能;意图是在将来的版本中继续为此类功能添加符号。
E.25.3.13. 附加模块 #
允许 GiST/GIN pg_trgm 索引进行等值查找(Julien Rouhaud)§
这类似于
LIKE,只是不识别通配符。允许
pgstattuple_approx()报告 TOAST 表(Peter Eisentraut)§增加 contrib 模块 pg_surgery 以允许更改行可见性(Ashutosh Sharma)§
这对于修复数据库损坏很有用。
增加 contrib 模块 old_snapshot,用于报告活动的 old_snapshot_threshold 所使用的
XID/时间映射(Robert Haas)§允许 amcheck 也检查堆页面(Mark Dilger)§
以前它只检查 B-树索引页面。
允许 pageinspect 检查 GiST 索引(Andrey Borodin,Heikki Linnakangas)§ §
将 btree_gist 函数标记为并行安全(Steven Winfield)§
E.25.3.13.1. pg_stat_statements #
将查询 hash 计算从 pg_stat_statements 移至核心服务器(Julien Rouhaud)§
新服务器参数 compute_query_id 的默认值
auto将在加载此扩展时自动启用查询 ID 计算。使 pg_stat_statements 分别跟踪顶层和嵌套语句(Julien Rohaud)§
以前,在跟踪所有语句时,相同的顶层和嵌套语句被作为单个条目跟踪;但分开此类用法似乎更有用。
为 pg_stat_statements 增加工具命令的行计数(Fujii Masao,Katsuragi Yuta,Seino Yuki)§ §
增加
pg_stat_statements_info系统视图以显示 pg_stat_statements 活动(Katsuragi Yuta,Yuki Seino,Naoki Nakamichi)§ §
E.25.3.13.2. postgres_fdw #
允许 postgres_fdw 批量
INSERT行(Takayuki Tsunakawa,Tomas Vondra,Amit Langote)§ §允许 postgres_fdw 在
IMPORT FOREIGN SCHEMA ... LIMIT TO指定时导入表分区(Matthias van de Meent)§默认情况下,仅导入分区表的根表。
增加 postgres_fdw 函数
postgres_fdw_get_connections()以报告打开的外部服务器连接(Bharath Rupireddy)§允许控制外部服务器在事务完成后是否保持连接打开(Bharath Rupireddy)§
这由
keep_connections控制,默认为开启。允许 postgres_fdw 在必要时重新连接到外部服务器(Bharath Rupireddy)§ §
以前外部服务器重启可能导致外部表访问错误。
增加 postgres_fdw 函数以丢弃缓存的连接(Bharath Rupireddy)§
E.25.4. 致谢 #
以下个人(按字母顺序)作为补丁作者、提交者、审阅者、测试人员或问题报告者为本版本做出了贡献。
| Abhijit Menon-Sen |
| Ádám Balogh |
| Adrian Ho |
| Ahsan Hadi |
| Ajin Cherian |
| Aleksander Alekseev |
| Alessandro Gherardi |
| Alex Kozhemyakin |
| Alexander Korotkov |
| Alexander Lakhin |
| Alexander Nawratil |
| Alexander Pyhalov |
| Alexandra Wang |
| Alexey Bashtanov |
| Alexey Bulgakov |
| Alexey Kondratov |
| Álvaro Herrera |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Andreas Grob |
| Andreas Kretschmer |
| Andreas Seltenreich |
| Andreas Wicht |
| Andres Freund |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Gierth |
| Andrey Borodin |
| Andrey Lepikhov |
| Andy Fan |
| Anton Voloshin |
| Antonin Houska |
| Arne Roland |
| Arseny Sher |
| Arthur Nascimento |
| Arthur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Ashwin Agrawal |
| Asif Rehman |
| Asim Praveen |
| Atsushi Torikoshi |
| Aya Iwata |
| Barry Pederson |
| Bas Poot |
| Bauyrzhan Sakhariyev |
| Beena Emerson |
| Benoît Lobréau |
| Bernd Helmle |
| Bernhard M. Wiedemann |
| Bertrand Drouvot |
| Bharath Rupireddy |
| Boris Kolpackov |
| Brar Piening |
| Brian Ye |
| Bruce Momjian |
| Bryn Llewellyn |
| Cameron Daniel |
| Chapman Flack |
| Charles Samborski |
| Charlie Hornsby |
| Chen Jiaoqian |
| Chris Wilson |
| Christian Quest |
| Christoph Berg |
| Christophe Courtois |
| Corey Huinker |
| Craig Ringer |
| Dagfinn Ilmari Mannsåker |
| Dana Burd |
| Daniel Cherniy |
| Daniel Gustafsson |
| Daniel Vérité |
| Daniel Westermann |
| Daniele Varrazzo |
| Dar Alathar-Yemen |
| Darafei Praliaskouski |
| Dave Cramer |
| David Christensen |
| David Fetter |
| David G. Johnston |
| David Geier |
| David Gilman |
| David Pirotte |
| David Rowley |
| David Steele |
| David Turon |
| David Zhang |
| Dean Rasheed |
| Denis Patron |
| Dian Fay |
| Dilip Kumar |
| Dimitri Nüscheler |
| Dmitriy Kuzmin |
| Dmitry Dolgov |
| Dmitry Marakasov |
| Domagoj Smoljanovic |
| Dong Wook |
| Douglas Doole |
| Duncan Sands |
| Edmund Horner |
| Edson Richter |
| Egor Rogov |
| Ekaterina Kiryanova |
| Elena Indrupskaya |
| Emil Iggland |
| Emre Hasegeli |
| Eric Thinnes |
| Erik Rijkers |
| Erwin Brandstetter |
| Etienne Stalmans |
| Etsuro Fujita |
| Eugen Konkov |
| Euler Taveira |
| Fabien Coelho |
| Fabrízio de Royes Mello |
| Federico Caselli |
| Felix Lechner |
| Filip Gospodinov |
| Floris Van Nee |
| Frank Gagnepain |
| Frits Jalvingh |
| Georgios Kokolatos |
| Greg Nancarrow |
| Greg Rychlewski |
| Greg Sabino Mullane |
| Gregory Smith |
| Grigory Smolkin |
| Guillaume Lelarge |
| Guy Burgess |
| Guyren Howe |
| Haiying Tang |
| Hamid Akhtar |
| Hans Buschmann |
| Hao Wu |
| Haribabu Kommi |
| Harisai Hari |
| Hayato Kuroda |
| Heath Lord |
| Heikki Linnakangas |
| Henry Hinze |
| Herwig Goemans |
| Himanshu Upadhyaya |
| Hironobu Suzuki |
| Hiroshi Inoue |
| Hisanori Kobayashi |
| Honza Horak |
| Hou Zhijie |
| Hubert Lubaczewski |
| Hubert Zhang |
| Ian Barwick |
| Ibrar Ahmed |
| Ildus Kurbangaliev |
| Isaac Morland |
| Israel Barth |
| Itamar Gafni |
| Jacob Champion |
| Jaime Casanova |
| Jaime Soler |
| Jakub Wartak |
| James Coleman |
| James Hilliard |
| James Hunter |
| James Inform |
| Jan Mussler |
| Japin Li |
| Jasen Betts |
| Jason Harvey |
| Jason Kim |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jelte Fennema |
| Jeremy Evans |
| Jeremy Finzel |
| Jeremy Smith |
| Jesse Kinkead |
| Jesse Zhang |
| Jie Zhang |
| Jim Doty |
| Jim Nasby |
| Jimmy Angelakos |
| Jimmy Yih |
| Jiri Fejfar |
| Joe Conway |
| Joel Jacobson |
| John Naylor |
| John Thompson |
| Jonathan Katz |
| Josef Šimánek |
| Joseph Nahmias |
| Josh Berkus |
| Juan José Santamaría Flecha |
| Julien Rouhaud |
| Junfeng Yang |
| Jürgen Purtz |
| Justin Pryzby |
| Kazutaka Onishi |
| Keisuke Kuroda |
| Kelly Min |
| Kensuke Okamura |
| Kevin Sweet |
| Kevin Yeap |
| Kirk Jamison |
| Kohei KaiGai |
| Konstantin Knizhnik |
| Kota Miyake |
| Krzysztof Gradek |
| Kuntal Ghosh |
| Kyle Kingsbury |
| Kyotaro Horiguchi |
| Laurent Hasson |
| Laurenz Albe |
| Lee Dong Wook |
| Li Japin |
| Liu Huailing |
| Luc Vlaming |
| Ludovic Kuty |
| Luis Roberto |
| Lukas Eder |
| Ma Liangzhu |
| Maciek Sakrejda |
| Madan Kumar |
| Magnus Hagander |
| Mahendra Singh Thalor |
| Maksim Milyutin |
| Marc Boeren |
| Marcin Krupowicz |
| Marco Atzeri |
| Marek Szuba |
| Marina Polyakova |
| Mario Emmenlauer |
| Mark Dilger |
| Mark Wong |
| Mark Zhao |
| Markus Wanner |
| Martín Marqués |
| Martin Visser |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masao Fujii |
| Mathis Rudolf |
| Matthias van de Meent |
| Matthieu Garrigues |
| Matthijs van der Vleuten |
| Maxim Orlov |
| Melanie Plageman |
| Merlin Moncure |
| Michael Banck |
| Michael Brown |
| Michael Meskes |
| Michael Paquier |
| Michael Paul Killian |
| Michael Powers |
| Michael Vastola |
| Michail Nikolaev |
| Michal Albrycht |
| Mikael Gustavsson |
| Movead Li |
| Muhammad Usama |
| Nagaraj Raj |
| Naoki Nakamichi |
| Nathan Bossart |
| Nathan Long |
| Nazli Ugur Koyluoglu |
| Neha Sharma |
| Neil Chen |
| Nick Cleaton |
| Nico Williams |
| Nikhil Benesch |
| Nikhil Sontakke |
| Nikita Glukhov |
| Nikita Konev |
| Nikolai Berkoff |
| Nikolay Samokhvalov |
| Nikolay Shaplov |
| Nitin Jadhav |
| Noah Misch |
| Noriyoshi Shinoda |
| Odin Ugedal |
| Oleg Bartunov |
| Oleg Samoilov |
| Önder Kalaci |
| Pascal Legrand |
| Paul Förster |
| Paul Guo |
| Paul Jungwirth |
| Paul Martinez |
| Paul Sivash |
| Pavan Deolasee |
| Pavel Boev |
| Pavel Borisov |
| Pavel Luzanov |
| Pavel Stehule |
| Pengcheng Liu |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Smith |
| Peter Vandivier |
| Petr Fedorov |
| Petr Jelínek |
| Phil Krylov |
| Philipp Gramzow |
| Philippe Beaudoin |
| Phillip Menke |
| Pierre Giraud |
| Prabhat Sahu |
| Quan Zongliang |
| Rafi Shamim |
| Rahila Syed |
| Rajkumar Raghuwanshi |
| Ranier Vilela |
| Regina Obe |
| Rémi Lapeyre |
| Robert Foggia |
| Robert Grange |
| Robert Haas |
| Robert Kahlert |
| Robert Sosinski |
| Robert Treat |
| Robin Abbi |
| Robins Tharakan |
| Roger Mason |
| Rohit Bhogate |
| Roman Zharkov |
| Ron L. Johnson |
| Ronan Dunklau |
| Ryan Lambert |
| Ryo Matsumura |
| Saeed Hubaishan |
| Sait Talha Nisanci |
| Sandro Mani |
| Santosh Udupi |
| Scott Ribe |
| Sehrope Sarkuni |
| Sergei Kornilov |
| Sergey Bernikov |
| Sergey Cherkashin |
| Sergey Koposov |
| Sergey Shinderuk |
| Sergey Zubkovsky |
| Shawn Wang |
| Shay Rojansky |
| Shi Yu |
| Shinya Kato |
| Shinya Okano |
| Sigrid Ehrenreich |
| Simon Norris |
| Simon Riggs |
| Sofoklis Papasofokli |
| Soumyadeep Chakraborty |
| Stas Kelvich |
| Stephan Springl |
| Stéphane Lorek |
| Stephen Frost |
| Steven Winfield |
| Surafel Temesgen |
| Suraj Kharage |
| Sven Klemm |
| Takamichi Osumi |
| Takashi Menjo |
| Takayuki Tsunakawa |
| Tang Haiying |
| Tatsuhito Kasahara |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Theodor Arsenij Larionov-Trichkin |
| Thomas Kellerer |
| Thomas Munro |
| Thomas Trenz |
| Tijs van Dam |
| Tom Ellis |
| Tom Gottfried |
| Tom Lane |
| Tom Vijlbrief |
| Tomas Barton |
| Tomas Vondra |
| Tomohiro Hiramitsu |
| Tony Reix |
| Vaishnavi Prabakaran |
| Valentin Gatien-Baron |
| Victor Wagner |
| Victor Yegorov |
| Vignesh C |
| Vik Fearing |
| Vitaly Ustinov |
| Vladimir Sitnikov |
| Vyacheslav Shablistyy |
| Wang Shenhao |
| Wei Wang |
| Wells Oliver |
| Wenjing Zeng |
| Wolfgang Walther |
| Yang Lin |
| Yanliang Lei |
| Yaoguang Chen |
| Yaroslav Pashinsky |
| Yaroslav Schekin |
| Yasushi Yamashita |
| Yoran Heling |
| YoungHwan Joo |
| Yugo Nagata |
| Yuki Seino |
| Yukun Wang |
| Yulin Pei |
| Yura Sokolov |
| Yuta Katsuragi |
| Yuta Kondo |
| Yuzuko Hosoya |
| Zhihong Yu |
| Zhiyong Wu |
| Zsolt Ero |
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.