E.2. 版本 14

E.2.1. 概述
E.2.2. 迁移到版本14
E.2.3. Changes
E.2.4. 致谢

版本日期: 2021-09-30

E.2.1. 概述

PostgreSQL 14 包含许多新功能和增强功能,包括:

  • 存储过程现在可以通过OUT返回数据参数. parameters.

  • SQL 标准 SEARCHCYCLE 表达式的 CYCLE 选项已实施.

  • 下标现在可以应用于它是有用表示法的任何数据类型,而不仅仅是数组. 在此版本中,jsonbhstore 类型获得了下标运算符.

  • 通过添加多范围,扩展了范围类型,允许表示非连续数据范围。

  • 对于并行查询、高度并发的工作负载、分区表、逻辑复制和清理,已经进行了大量性能改进.

  • 更有效地管理B树索引更新,减少索引膨胀。

  • VACUUM 自动变得更具进取性 如果数据库开始接近事务ID环绕条件,则跳过不必要的清理

  • 现在可以收集表达式的扩展统计信息,从而为复杂查询提供更好的规划结果.

  • libpq 现在有能力对多个查询进行流水线处理,这可以提高高延迟连接的吞吐量.

上述项目和其他新功能属于PostgreSQL 14,在下面的部分中更详细地解释.

E.2.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() used to take anyarray 参数,但现在采用和anycompatiblearray.因此,用户定义的对象(如引用这些数组函数签名的聚合和运算符)必须在升级之前删除,并在升级完成.

  • 删除不推荐使用的包含运算符@~内置geometric data types and contrib modules cube, hstore, intarray, 和seg (Justin Pryzby)

    更一致的命名<@@> 已推荐多年.

  • 修复 to_tsquery() and websearch_to_tsquery() 要正确解析包含丢弃标记的查询文本,请执行以下操作. (Alexander Korotkov)

    某些被丢弃的标记(如下划线)导致这些函数的输出产生不正确的tsquery输出,例如 websearch_to_tsquery('"pg_class pg"')to_tsquery('pg_class <-> pg') used to output ( 'pg' & 'class' ) <-> 'pg', but now both output 'pg' <-> 'class' <-> 'pg'.

  • 修复websearch_to_tsquery() 要正确解析引号中的多个相邻丢弃标记,请执行以下操作. (Alexander Korotkov)

    以前,包含多个相邻丢弃标记的引用文本被视为多个标记,导致错误的tsquery输出 .如, websearch_to_tsquery('"aaa: bbb"') 过去用于输出 'aaa' <2> 'bbb', 但现在输出'aaa' <-> 'bbb'.

  • 改变 EXTRACT() 返回类型 numeric来代替float8 (Peter Eisentraut)

    这避免了某些使用中的精度损失问题。旧的行为仍然可以通过使用旧的底层函数获得 date_part().

    此外, EXTRACT(date) 现在会为不属于date数据类型的单位抛出错误 .

  • 改变 var_samp() and stddev_samp() 当输入为单个NaN值时,使用数值参数返回NULL (Tom Lane)

    之前 NaN 被返回.

  • 对于has_column_privilege() 使用属性号时检查不存在或删除的列 (Joe Conway)

    以前,此类属性号返回了无效列错误.

  • 无限的固定处理 window function ranges (Tom Lane)

    之前 window frame 条款像 'inf' PRECEDING AND 'inf' FOLLOWING 返回不正确的结果.

  • 删除阶乘算子 ! and !!, 以及函数 numeric_fac() (Mark Dilger)

    factorial() 函数依然被支持.

  • 不允许负数的阶 factorial() (Peter Eisentraut)

    以前此类案例返回 1 .

  • 删除对postfix (右一元)运算符 (Mark Dilger)

    pg_dumppg_upgrade 如果后缀运算符将发出警告 正在被转储.

  • 允许 \D\W 速记 匹配换行符 regular expression 换行敏感模式 (Tom Lane)

    以前,它们在此模式下不匹配换行符,但这与其他常见正则表达式引擎的行为不一致。 [^[:digit:]] or [^[:word:]]可以用来获取旧行为.

  • 匹配正则表达式时忽略约束 back-references (Tom Lane)

    例如, 在(^\d+).*\1, ^ 约束应在字符串的开头应用,但在匹配时不应应用 \1.

  • 不允许 \w 作为正则表达式字符类中的范围开始或结束 (Tom Lane)

    这在以前是允许的,但产生了意想不到的结果.

  • 需要 custom server parameter 名称以仅使用在 中有效的字符 未加引号的 SQL标识符(Tom Lane)

  • 更改 password_encryption 服务器参数 scram-sha-256 (Peter Eisentraut)

    以前是 md5。 以前是 md5。 所有新密码将存储为 SHA256,除非更改此服务器设置或 密码以 MD5 格式指定。 此外,遗产(和未记录的)以前是同义词的类似布尔值 对于 md5 不再被接受。

  • 删除服务器参数 vacuum_cleanup_index_scale_factor (Peter Geoghegan)

    此设置从 PostgreSQL13.3.版本开始被忽略

  • 删除服务器参数 operator_precedence_warning (Tom Lane)

    此设置用于警告应用程序在 PostgreSQL 9.5 更改。

  • 彻底修改 clientcertpg_hba.conf (Kyotaro Horiguchi)

    Values 1/0/no-verify 不再受支持; 仅字符串 verify-caverify-full 可以被使用. 。此外,如果启用了证书身份验证,则不允许证书verify-ca因为证书需要 verify-full 检查。

  • 删除对SSL 的支持压缩 (Daniel Gustafsson, Michael Paquier)

    这在之前的版本中已默认禁用 PostgreSQL 版本, 这在之前的版本中已默认禁用 PostgreSQL版本,大多数现代OpenSSLTLS versions no longer support it.

  • 删除服务器和 libpq 对第2版 有线协议 的支持(Heikki Linnakangas)

    这是上次在PostgreSQL7.3(2002年发布)中用作默认值。

  • 不允许在CREATE/DROP LANGUAGE中对语言名称进行单引号引用(Peter Eisentraut)

  • 删除 复合类型 以前为序列和toast创建的

  • 正确处理 ecpg SQL 命令字符串中的双引号 (Tom Lane)

    以前,'abc''def'作为'abc'def'传递到服务器,而"abc""def"作为"abc"def"传递,导致语法错误。

  • 防止 intarray的包含运算符 (<@ and @>)使用GiST索引 (Tom Lane)

    以前需要进行完整的GiST索引扫描,因此请避免 然后扫描堆,速度更快。应删除为此目的创建的索引。

  • 删除contrib程序pg_standby (Justin Pryzby)

  • 防止tablefunc的函数 normal_rand()接受负值(Ashutosh Bapat)

    负值会产生不期望的结果。

E.2.3. Changes

您将在下面找到PostgreSQL14与上一个主要版本之间更改的详细说明。

E.2.3.1. Server

  • 添加预定义角色 pg_read_all_datapg_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)

    以前,元组的插入将超过页面的填充因 改为添加到新页面。

  • 在中添加服务器名称指示(<首字母缩写>SNI</首字母缩写>) SSL连接数据包 (Peter Eisentraut)

    可以通过关闭客户端连接选项sslsni来禁用此功能。

E.2.3.1.1. Vacuuming
  • 当可移动索引项的数量不多时,允许真空跳过索引vacuuming (Masahiko Sawada, Peter Geoghegan)

    真空参数INDEX_CLEANUP 具有 启用此优化的新默认值auto

  • 允许vacuum更急切地将已删除的btree页面添加到免费 空间地图 (Peter Geoghegan)

    以前,vacuum只能将标记为已被以前的vacuum删除的页面添加到可用空间映射.

  • 允许vacuum回收未使用的尾随堆指针使用的空间 (Matthias van de Meent, Peter Geoghegan)

  • 允许vacuum在最小锁定索引操作期间更积极地移除死行 (Álvaro Herrera)

    具体来说,<command>CREATE INDEX CONCURRENTLY</command>和 同时重新索引不再限制死区 其他关系的行删除.

  • 加快对具有多个关系的数据库的清理 (Tatsuhito Kasahara)

  • 减少vacuum_cost_page_miss的默认值,以更好地反映当前硬件功能 (Peter Geoghegan)

  • 添加跳过TOAST表的vacuuming 处理的功能 (Nathan Bossart)

    VACUUM现在具有PROCESS_TOAST,可设置为 false禁用TOAST 处理和vacuumdb 有一个-−没有进程toast选项。

  • COPY FREEZE适当更新页面可见性位 (Anastasia Lubennikova, Pavan Deolasee, Jeff Janes)

  • 如果工作台接近xid或multixact环绕,则会导致真空操作更具攻击性 (Masahiko Sawada, Peter Geoghegan)

    这由vacuum_failsafe_agevacuum_multixact_failsafe_age控制。

  • 增加事务id和多事务环绕之前的警告时间和硬限制 (Noah Misch)

    这将减少在未发出环绕警告的情况下发生故障的可能性。

  • 将每个索引信息添加到autovacuum日志 输出 (Masahiko Sawada)

E.2.3.1.2. Partitioning
  • 提高具有多个分区的分区表的更新和删除性能 (Amit Langote, Tom Lane)

    这种更改大大减少了规划器在这种情况下的开销,还允许对分区表进行更新/删除,以使用执行时分区修剪。

  • 允许分区为以非阻塞方式分离 (Álvaro Herrera)

    语法是ALTER TABLE ... DETACH PARTITION ... CONCURRENTLY, 和 FINALIZE.

  • 忽略分区边界中的COLLATE 子句价值观 (Tom Lane)

    以前,任何这样的子句都必须与分区密钥;但更一致的是,考虑自动强制为分区键的排序规则。

E.2.3.1.3. 索引
  • 允许将btree索引添加到删除过期的索引项防止页面拆分 (Peter Geoghegan)

    这对于减少表上的索引膨胀特别有帮助其索引列经常更新。

  • 允许BRIN索引记录每个范围的多个最小/最大值 (Tomas Vondra)

    如果每个页面范围中都有一组值,则这很有用。

  • 允许BRIN 索引使用bloom过滤器 (Tomas Vondra)

    这使得 BRIN 索引得到有效使用数据在堆中没有很好地本地化。

  • 允许构建一些GiST索引通过对数据进行预排序 (Andrey Borodin)

    预排序自动进行,并允许更快的索引创建和更小的索引。

  • 允许SP-GiST indexes to contain INCLUDE'd列 (Pavel Borisov)

E.2.3.1.4. Optimizer
  • 允许对带有多个常量的IN子句进行哈希查找 (James Coleman, David Rowley)

    以前,代码总是顺序扫描列表值。

  • 增加位置数扩展统计数据可以用于OR 子句估计(Tomas Vondra, Dean Rasheed)

  • 允许对表达式进行扩展统计 (Tomas Vondra)

    这允许对一组表达式和列进行统计,而不是像以前那样仅列。系统视图pg_stats_ext_exprs这些统计数据的报告。

  • 允许对TIDs的范围进行高效堆扫描(Edmund Horner, David Rowley)

    以前,不相等需要顺序扫描TID 规格。

  • 修复EXPLAIN CREATE TABLE ASEXPLAIN CREATE MATERIALIZED VIEW以尊重如果不存在 (Bharath Rupireddy)

    先前如果对象已经存在,EXPLAIN将失败。

E.2.3.1.5. 一般性能
  • 提高计算速度MVCC 可见性快照在具有多个CPU和高会话计数 (Andres Freund)

    当存在许多空闲会话时,这也提高了性能。

  • 添加executor方法以从嵌套循环连接 (David Rowley)

    如果只选中了一小部分行,这将非常有用内侧。可以通过服务器参数enable_memoize

  • 允许窗口函数执行增量排序 (David Rowley)

  • 提高并行顺序扫描的I/O性能 (Thomas Munro, David Rowley)

    这是通过将组中的块分配给并行工作者

  • 允许查询引用多个要执行的外部表并行外部表扫描(Robert Haas, Kyotaro Horiguchi,Thomas Munro, Etsuro Fujita)

    postgres_fdw支持这种类型的扫描,如果async_capable设置。

  • 允许分析进行页面预取 (Stephen Frost)

    这由maintenance_io_concurrency控制。

  • 提高正则表达式搜索的性能 (Tom Lane)

  • 显著提高Unicode规范化性能 (John Naylor)

    此速度<normalize()是标准化的

  • 添加使用LZ4压缩TOAST的数据 (Dilip Kumar)

    这可以在列级别设置,也可以通过服务器设置为默认值参数default_toast_compression。 必须使用--with-lz4以支持此功能。默认设置仍然是pglz。

E.2.3.1.6. 监测
E.2.3.1.7. 系统视图
E.2.3.1.8. 认证
  • 允许SSL证书的可分辨名称 (DN) 要与客户端证书身份验证匹配 (Andrew Dunstan)

    新的 pg_hba.conf option clientname=DN,允许与证书属性超出了CN,并且可以与识别图结合使用。

  • 允许pg_hba.confpg_ident.conf 记录跨越多行 (Fabien Coelho)

    行末尾的反斜杠允许记录内容继续下一行。

  • 允许指定证书吊销列表(CRL) 目录 (Kyotaro Horiguchi)

    这由服务器参数ssl_crl_dir 和libpq连接选项sslcrldir。以前只有 可以指定单个CRL 文件。

  • 允许任意长度的密码 (Tom Lane, Nathan Bossart)

E.2.3.1.9. 服务器配置

E.2.3.2. 流复制和恢复

  • 允许备用服务器通过 pg_rewind (Heikki Linnakangas)

  • 允许在服务器重新加载期间更改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打开数据库集群中的每个数据文件,并在开始崩溃恢复。新设置,xref linkend="guc-recovery-init-sync-method"/>=syncfs,而是同步集群使用的每个文件系统。这允许在具有许多数据库文件的系统上进行更快的恢复。

  • 添加函数pg_xact_commit_timestamp_origin()要返回指定事务 (Movead Li)

  • 将复制源添加到pg_last_committed_xact()返回的记录中 (Movead Li)

  • 允许复制原始函数使用标准功能权限进行控制 (Martín Marqués)

    以前,这些功能只能由超级用户执行,这仍然是默认值。

E.2.3.2.1. 逻辑复制
  • 允许逻辑复制将长时间进行中的事务流式传输到订阅服务器(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)

  • 立即WAL-记录子事务和顶级事务 XID关联 (Tomas Vondra, Dilip Kumar, Amit Kapila)

    这对于逻辑解码是有用的。

  • 增强逻辑解码API以处理两阶段提交 (Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)

    这是通过pg_create_logical_replication_slot()控制的。

  • 将缓存无效消息添加到WAL使用逻辑复制时在命令完成期间 (Dilip Kumar, Tomas Vondra, Amit Kapila)

    这允许进行中事务的逻辑流。禁用逻辑复制时,无效消息为仅在事务完成时生成。

  • 允许逻辑解码更有效地处理缓存无效消息 (Dilip Kumar)

    这允许逻辑解码在大量工作的情况下高效工作 DDL

  • 允许控制是否将逻辑解码消息发送到复制流 (David Pirotte, Euler Taveira)

  • 允许逻辑复制订阅使用二进制传输模式 (Dave Cramer)

    这比文本模式快,但强健性稍差。

  • 允许通过xid过滤逻辑解码 (Markus Wanner)

E.2.3.3. SELECT, INSERT

  • Reduce the number of keywords that can't be used as column labels without AS(Mark Dilger)

    现在限制性关键字减少了90%。

  • 允许为JOINUSING子句 (Peter Eisentraut)

    别名是通过在USING子句之后编写AS使用。它可以用作表格 使用USING进行限定。

  • 允许将DISTINCT添加到GROUP BY来移除备份GROUPING SET组合 (Vik Fearing)

    例如,GROUP BY CUBE (a,b), CUBE (b,c)将生成重复的分组组合 DISTINCT

  • 正确处理DEFAULT 多行中的 VALUES lists in INSERT (Dean Rasheed)

    这种情况用于抛出错误。

  • 添加SQL-standard SEARCHCYCLE语句用于 通用表表达式的查询(Peter Eisentraut)

    使用现有语法可以实现相同的结果,但是更不方便。

  • 允许列名在WHERE 子句中 ON CONFLICT为表限定 (Tom Lane)

    但是,只能引用目标表。

E.2.3.4. 实用命令

  • 允许REFRESH MATERIALIZED VIEW使用并行 (Bharath Rupireddy)

  • 允许REINDEX更改新索引的表空间 (Alexey Kondratov, Michael Paquier, Justin Pryzby)

    这是通过指定TABLESPACE 子句实现的。-−tablespace选项也被添加到reindexdb以控制这一点。

  • 允许REINDEX处理所有子表,或分区关系的索引 (Justin Pryzby, Michael Paquier)

  • 允许同时使用CONCURRENTLY将索引命令使用避免等待其他操作完成CONCURRENTLY (Álvaro Herrera)

  • 在二进制模式,提高COPY FROM的性能(Bharath Rupireddy, Amit Langote)

  • 保护SQLSQL定义的标准语法功能视图定义 (Tom Lane)

    以前,调用SQL标准函数,如EXTRACT()以普通函数调用语法显示。原始语法现在在显示视图或规则时保留。

  • 添加SQL-标准子句GRANTED BYGRANTREVOKE(Peter Eisentraut)

  • OR REPLACE 选项 CREATE TRIGGER (Takamichi Osumi)

    这允许有条件地替换预先存在的触发器。

  • 允许TRUNCATE 在外部的表上运行(Kazutaka Onishi, Kohei KaiGai)

    这个postgres_fdw模块现在也支持此功能。

  • 允许更轻松地将出版物添加到订阅 (Japin Li)

    新语法是ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION。这避免了必须指定要添加/删除条目的所有发布。

  • 将主键、唯一约束和外键添加到系统目录 (Peter Eisentraut)

    这些更改有助于GUI工具分析系统目录。目录的现有唯一索引现在有:关联UNIQUEPRIMARY KEY约束。外键关系不是实际存储或实现为约束,但可以获得从函数pg_get_catalog_foreign_keys()

  • 允许CURRENT_ROLE 每个位置 CURRENT_USER都被接受 (Peter Eisentraut)

E.2.3.5. 数据类型

  • 允许扩展和内置数据类型实现订阅 (Dmitry Dolgov)

    以前,下标处理是硬编码到服务器中的,因此该下标只能应用于数组类型。这种变化允许使用下标符号提取或分配部分对于概念有意义的任何类型的值。

  • 允许订阅JSONB (Dmitry Dolgov)

    JSONB订阅可用于提取和分配到JSONB文档的部分。

  • 添加多范围数据类型 (Paul Jungwirth, Alexander Korotkov)

    这些数据类型类似于范围数据类型,但它们允许规范多个有序的非重叠范围。关联为每个范围类型自动创建多范围类型。

  • 添加对词干语言亚美尼亚语、巴斯克语、加泰罗尼亚语、印地语、塞尔维亚语和意第绪语 (Peter Eisentraut)

  • 允许 t搜索数据文件具有无限的行长度 (Tom Lane)

    之前的限制是4K字节。也删除函数 t_readline()

  • 添加支持给无穷大的-无穷的值在数值数据类型 (Tom Lane)

    这些已经支持浮点数据类型。

  • 添加 point operators <<| and |>>严格表示高于/低于测试 (Emre Hasegeli)

    以前,这些被称为>^<^,但该命名与其他几何数据类型。旧名称仍然可用,但有一天可能被移除。

  • 添加运算符以添加和减去LSN和数字(字节)值 (Fujii Masao)

  • 允许二进制数据传输以更宽容阵列和记录OID不匹配 (Tom Lane)

  • 为系统目录创建复合数组类型 (Wenjing Zeng)

    长期以来,用户定义的关系一直与复合类型相关联以及这些复合类型上的数组类型。系统目录现在也可以。此更改还修复了 在单个用户中创建用户定义表的不一致性模式将无法创建复合数组类型。

E.2.3.6. 函数

  • 允许SQL-语言 函数过程 来使用 SQL-标准函数体(Peter Eisentraut)

    以前只支持字符串文字函数体。当以SQL标准语法编写函数或过程时,正文立即被解析并存储为解析树。 这允许更好地跟踪函数依赖关系,并且可以安全利益。

  • 允许 程序来拥有 OUT参数 (Peter Eisentraut)

  • 允许某些数组函数对兼容数据的混合进行操作类型 (Tom Lane)

    函数array_append(), array_prepend(), array_cat(), array_position(), array_positions(), array_remove(), array_replace(), 和width_bucket() 现在使用 anycompatiblearray 而不是任意数组 arguments. 这使他们不那么挑剔关于参数类型的精确匹配。

  • 添加<acronym>SQL<acronomm>标准<trim_array()作用 (Vik Fearing)

    这已经可以通过阵列切片完成,但不太容易。

  • 添加bytea等效的ltrim()rtrim() (Joel Jacobson)

  • 支持split_part()中的负索引 (Nikhil Benesch)

    负值从最后一个字段开始并向后计数。

  • 添加string_to_table()函数在分隔符上拆分字符串 (Pavel Stehule)

    这类似于regexp_split_to_table()作用

  • 添加 unistr() 函数允许将Unicode字符指定为字符串中的反斜杠十六进制转义(Pavel Stehule)

    这类似于在文字字符串中指定Unicode的方式。

  • 添加 bit_xor()聚合函数的异或(Alexey Bashtanov)

  • 添加函数 bit_count()返回位或字节字符串中设置的位数(David Fetter)

  • 添加 date_bin() 作用 (John Naylor)

    此函数 bins输入时间戳,并对它们进行分组成与指定原点对齐的均匀长度的间隔。

  • 允许make_timestamp()/make_timestamptz()接受消极的年份 (Peter Eisentraut)

    负值被解释为BC年。

  • 添加新的正则表达式substring()语法 (Peter Eisentraut)

    新的SQL标准语法是SUBSTRING(text SIMILAR pattern ESCAPE escapechar)。以前的标准语法是 SUBSTRING(text FROM pattern FOR escapechar)PostgreSQL仍接受此选项。

  • 允许补字符类转义\D, \S, 和 \W在正则表达式括号内 (Tom Lane)

  • 添加[[:word:]] 作为正则表达式字符类,等效到\w (Tom Lane)

  • 默认值允许更灵活的数据类型lead()lag()窗口函数 (Vik Fearing)

  • 使非零的浮点值 floating-point values除以无穷大返回零 (Kyotaro Horiguchi)

    以前,此类操作会产生下溢错误。

  • 将NaN除以零,返回NaN (Tom Lane)

    之前,这返回了一个错误。

  • 原因 exp() and power()对于负无穷指数 归零 (Tom Lane)

    以前,它们经常返回下溢错误。

  • 提高几何计算的准确性,包括:无穷(Tom Lane)

  • 尽可能将内置类型强制功能标记为防漏功能 (Tom Lane)

    这允许更多地使用中需要类型转换的函数安全敏感局势。

  • 更改pg_describe_object(), pg_identify_object(), 和 pg_identify_object_as_address()始终报告不存在对象的有用错误消息 (Michael Paquier)

E.2.3.7. PL/pgSQL

  • 改进PL/pgSQL的表达式赋值 解析 (Tom Lane)

    此更改允许分配给数组切片和嵌套记录 fields.

  • 允许plpgsql的 RETURN QUERY使用并行性执行查询 (Tom Lane)

  • 提高重复CALLs程序(Pavel Stehule, Tom Lane)

E.2.3.8. 客户端接口

  • 将管道pipeline mode添加到libpq (Craig Ringer, Matthieu Garrigues, Álvaro Herrera)

    这允许发送多个查询,只等待完成当发送特定同步消息时。

  • 增强libpq的target_session_attrs参数选项 (Haribabu Kommi, Greg Nancarrow, Vignesh C, Tom Lane)

    新选项为只读, , 备用, 和 首选待机状态

  • 改进libpq的输出格式PQtrace() (Aya Iwata, Álvaro Herrera)

  • 允许将ECPG SQL标识符链接到特定的联系 (Hayato Kuroda)

    这是通过DECLARE ... STATEMENT

E.2.3.9. 客户端应用程序

  • 允许vacuumdb跳过索引清理和截断 (Nathan Bossart)

    选项有:-−无索引清理-−不截断

  • 允许pg_dump仅转储某些扩展 (Guillaume Lelarge)

    这由选项-−扩展名控制。

  • 添加pgbench permute()函数随机搅乱值 (Fabien Coelho, Hironobu Suzuki, Dean Rasheed)

  • 在测量的重新连接开销中包括断开时间通过pgbench-C (Yugo Nagata)

  • 允许多个详细选项规范 (-v)要增加日志记录的详细程度: (Tom Lane)

    支持此行为通过pg_dump, pg_dumpall, 和pg_restore

E.2.3.9.1. psql
  • 允许psql\df\do命令来指定函数和运算符参数类型 (Greg Sabino Mullane, Tom Lane)

    这有助于减少为重载名称打印的匹配数。

  • 将访问方法列添加到psql's \d[i|m|t]+ 输出 (Georgios Kokolatos)

  • 允许psql\dt\di显示TOAST表及其索引 (Justin Pryzby)

  • 添加psql 命令\dX要列出扩展统计对象,请执行以下操作:(Tatsuro Yamada)

  • 修复psql\dT到了解数组语法和后端语法别名,类似于初始化整数 (Greg Sabino Mullane, Tom Lane)

  • 使用编辑上一个查询或文件时psql\e, 或者使用 \ef\ev,如果编辑器退出而不保存则忽略结果, (Laurenz Albe)

    以前,此类编辑会将以前的查询加载到查询缓冲区,通常立即执行。这是被认为可能不是用户想要的。

  • 改进选项卡完成 (Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud)

E.2.3.10. 服务器应用程序

  • 添加命令行实用程序pg_amcheck要简化运行contrib/amcheck对许多关系的测试 (Mark Dilger)

  • -−无指令 选项添加到 initdb (Magnus Hagander)

    这将抑制正常打印的服务器启动指令。

  • 停止pg_upgrade 从创建analyze_new_cluster 脚本 (Magnus Hagander)

    相反,给出可比较的vacuumdb说明书

  • 删除支持给 postmaster -o选项 (Magnus Hagander)

    该选项是不必要的,因为所有传递的选项都可以直接指定。

E.2.3.11. 文档

  • 重命名"Default Roles"为“Predefined Roles” (Bruce Momjian, Stephen Frost)

  • factorial()添加文档功能(Peter Eisentraut)

    随着移除!操作员在此释放中, factorial()是唯一的内置计算方法阶乘。

E.2.3.12. 源代码

  • 添加配置选项-−with-ssl={openssl}允许将来选择要使用的SSL库 (Daniel Gustafsson, Michael Paquier)

    拼写--with openssl是为了兼容性而保留的。

  • 添加对 抽象unix域套接字(Peter Eisentraut)

    当前支持LinuxWindows

  • 允许Windows正确处理大于4 GB的文件 (Juan José Santamaría Flecha)

    例如,这允许COPY, WAL文件和关系段文件大于4G字节。

  • 添加服务器参数debug_discard_caches为测试目的控制缓存刷新 (Craig Ringer)

    以前,此行为只能在编译时设置。要在 initdb, 使用新的选项 -−discard-caches

  • valgrind中的各种改进 valgrind错误检测能力 (Álvaro Herrera, Peter Geoghegan)

  • 为正则表达式包添加测试模块 (Tom Lane)

  • 添加对LLVM版本12的支持 (Andres Freund)

  • 将SHA1、SHA2和MD5哈希计算更改为使用OpenSSL EVP API (Michael Paquier)

    这更现代,支持FIPS模式。

  • 删除对随机数生成器选择的单独生成时间控制(Daniel Gustafsson)

    这现在总是由SSL库的选择决定。

  • 在EUC_TW和Big5编码之间添加直接转换例程 (Heikki Linnakangas)

  • FreeBSD添加排序规则版本支持 (Thomas Munro)

  • 添加amadjustmembers到索引访问方法API(Tom Lane)

    这允许索引访问方法在创建新运算符类或族期间提供有效性检查。

  • libpq fe.h中提供对于最近添加的libpq功能的测试宏 (Tom Lane, Álvaro Herrera)

    历史上,应用程序通常使用编译时检查PG_VERSION_NUM来测试功能是否 可获得的但这通常是服务器版本不是libpq的版本. libpq-fe.h 现在提供 #define符号表示v14中添加的应用程序可见功能;目的是保持在未来版本中为这些功能添加符号。

E.2.3.13. 附加模块

  • 允许订阅hstore值 (Tom Lane, Dmitry Dolgov)

  • 允许GiST/GINpg_trgm 索引进行平等查找 (Julien Rouhaud)

    这与<literal>类似,但没有通配符很荣幸。

  • 允许cube 数据类型以二进制模式传输 (KaiGai Kohei)

  • 允许pgstattuple_approx() 要报告 TOAST表(Peter Eisentraut)

  • 添加contrib模块pg_surgery这允许更改行可见性 (Ashutosh Sharma)

    这对于纠正数据库损坏非常有用。

  • 添加contrib模块<old_snapshot 来报告 XID/活动使用的时间映射 old_snapshot_threshold (Robert Haas)

  • 允许amcheck同时检查堆页 (Mark Dilger)

    以前它只检查B树索引页。

  • 允许pageinspect检查GiST索引 (Andrey Borodin, Heikki Linnakangas)

  • 更改页面检查block编号成为bigints (Peter Eisentraut)

  • 标记btree_gist用作并行安全 (Steven Winfield)

E.2.3.13.1. pg_stat_statements
  • 将查询哈希计算从 pg_stat_statements到核心服务器 (Julien Rouhaud)

    新的服务器参数compute_query_id默认的自动将自动启用查询加载此扩展时的id计算。

  • 使pg_stat_statements跟踪top和嵌套语句 (Julien Rohaud)

    以前,当跟踪所有语句时,相同的top和嵌套将报表作为单个条目进行跟踪;但它似乎更有用以分离这些用途。

  • 将实用程序命令的行数添加到pg_stat_statements (Fujii Masao, Katsuragi Yuta, Seino Yuki)

  • 在添加pg_stat_statements_info到系统视图pg_stat_statements 活动 (Katsuragi Yuta, Yuki Seino, Naoki Nakamichi)

E.2.3.13.2. postgres_fdw
  • 允许postgres_fdwINSERT大量行 (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.2.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