Skip to content

Latest commit

 

History

History
824 lines (405 loc) · 48 KB

pg14-release-note.md

File metadata and controls

824 lines (405 loc) · 48 KB
title date author description
PG14 RC新特性
2021-09-29

PG14 RC新特性

Release date: 2021-??-?? (AS OF 2021-09-18)

原文:https://www.postgresql.org/docs/14/release-14.html

1 概览

PostgreSQL 14 包含了大量新特新与改进,如下所述。

2 迁移

对于那些希望从以前的版本迁移数据的用户,需要使用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。因此,用户定义的对象(如聚合体)和引用这些数组函数签名的操作符必须在升级前放弃,并在升级完成后重新创建。

  • 为内置的 geometric data types 和 contrib 模块 cube, hstore, intarrayseg 删除废弃的包含操作符 @~ (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(),返回类型为numeric而不是float8(Peter Eisentraut)

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

    另外,EXTRACT(date)现在对不属于date数据类型的单位抛出一个错误。

  • 更改var_samp()stddev_samp()的数字参数,当输入的是一个NaN值时,返回NULL (Tom Lane)

    以前是返回NaN

  • 当使用属性号时,对不存在或被放弃的列进行的has_column_privilege()检查返回false (Joe Conway)

    以前这样的属性号会返回一个无效列的错误。

  • 修正对无限窗口函数范围的处理(Tom Lane)

    以前这样的属性号会返回一个无效的错误。

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

    仍然支持fractorial()函数。

  • 不允许对负数fractorial()(Peter Eisentraut)

    以前这种情况会返回1。

  • 移除对postfix(右单操作数)运算符的支持(Mark Dilger)

    pg_dump和pg_upgrade会在postfix操作符被转储时发出警告。

  • 允许DW速记符在regular expression换行敏感模式下匹配换行(Tom Lane)

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

  • 匹配正则表达式时不考虑约束条件 back-references (Tom Lane)

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

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

    这在以前是允许的,但产生了意外的结果。

  • 要求自定义服务器参数名称只使用在未引用的SQL标识符中有效的字符(Tom Lane)

  • 改变password_encryption服务器参数的默认值为scram-sha-256(Peter Eisentraut)

    以前是md5。所有新的密码都将被存储为SHA256,除非这个服务器设置被改变或者密码被指定为MD5格式。同时,不再接受以前md5的同义词--传统的(和无记录的)布尔值。

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

    从PostgreSQL 13.3版开始,这个设置被忽略了。

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

    这个设置是用来警告应用程序关于PostgreSQL 9.5的变化。

  • 彻底修改pg_hba.confclientcert的规范 (Kyotaro Horiguchi)

    不再支持1/0/no-verify值;只能使用字符串verify-caverify-full。另外,如果启用了cert认证,不允许verify-ca,因为cert需要verify-full检查。

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

    这在以前的PostgreSQL版本中已经默认禁用,而且大多数现代OpenSSL和TLS版本不再支持它。

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

    这是在PostgreSQL 7.3(2002年发布)中最后一次作为默认使用。

  • CREATE/DROP LANGUAGE命令中不允许语言名称的单引号 (Peter Eisentraut)

  • 删除以前为序列和Toast表创建的复合类型 (Tom Lane)

  • 正确处理 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)

    负值产生了不理想的结果。

3. 变化

下面你将看到PostgreSQL 14和上一个大版本之间的变化的详细说明。

3.1. 服务端

  • 增加预定义角色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()增加一个可选的超时参数。

  • 允许宽元组总是被添加到几乎空的堆页中(John Naylor, Floris van Nee)

    以前,如果插入的元组超过了页面的fill factor,则会被添加到新的页面。

  • 在SSL连接数据包中添加服务器名称指示(SNI)(Peter Eisentraut)

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

  • 当可移动的索引条目数量不多时,允许垃圾清理跳过索引清理(Masahiko Sawada, Peter Geoghegan)

    清理参数INDEX_CLEANUP有一个新的默认值auto,可以启用这个优化。

  • 允许清理更急切地将删除的btree页面添加到自由空间映射中(Peter Geoghegan)

    以前,清理只能将被以前的真空标记为已删除的页面添加到自由空间映射中。

  • 允许清理回收未使用的堆尾部行指针所使用的空间(Matthias van de Meent, Peter Geoghegan)

  • 允许清理在最小锁定索引操作中更积极地删除死元组(Álvaro Herrera)。

    具体来说,CREATE INDEX CONCURRENTLYREINDEX 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 wraparound,使清理操作更加积极(Masahiko Sawada, Peter Geoghegan)。

    这由 vacuum_failsafe_agevacuum_multixact_failsafe_agevacuum_multixact_failsafe_age 控制。

  • 增加事务ID和多事务包裹前的警告时间和硬限制(Noah Misch)

    这应该可以减少在没有发出wraparound警告的情况下发生故障的可能性。

  • autovacuum日志输出 中增加每个索引的信息 (Masahiko Sawada)

3.1.2. 分区

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

    这一变化大大降低了规划器在这种情况下的开销,同时也允许分区表的更新/删除使用运行时分区剪枝。

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

    语法是 ALTER TABLE ... 脱离分区... CONCURRENTLY,和FINALIZE

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

    以前,任何这样的子句都必须与分区键的排序相匹配;但考虑到它会自动强制到分区键的排序,这就更加一致了。

3.1.3. 索引

  • 允许btree索引的添加删除过期的索引条目,以防止页面分裂(Peter Geoghegan)

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

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

    如果每个页面范围内有多组数值,这就很有用。

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

    这使得BRIN索引可以有效地用于在堆中没有很好定位的数据。

  • 允许一些GiST索引通过预排序数据来建立(Andrey Borodin)

    预排序会自动发生,并允许更快的索引创建和更小的索引。

  • 允许SP-GiST索引包含`INCLUDE'列(Pavel Borisov)

3.1.4. 优化器

  • 允许对有许多常量的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,以尊重IF NOT EXISTS(Bharath Rupireddy)

    以前,如果对象已经存在,EXPLAIN会失败。

3.1.5. 一般性能

  • 提高在有许多CPU和高会话数的系统上计算MVCC可视性快照的速度(Andres Freund)

    这也提高了有许多空闲会话时的性能。

  • 增加执行器方法,以记忆来自嵌套循环连接内侧的结果(David Rowley)。

    如果只有一小部分行在内侧被检查,这很有用。可以通过服务器参数enable_memoize禁用它。

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

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

    这是通过将块分组分配给并行工作者来实现的。

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

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

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

    这是由maintain_io_concurrency控制的。

  • 提高regular expression搜索的性能(Tom Lane)。

  • 大幅改善Unicode规范化(John Naylor)。

    这加快了 normalize()IS NORMALIZED 的速度。

  • 增加对TOAST数据使用LZ4压缩的能力(Dilip Kumar)

    这可以在列级设置,或通过服务器参数default_toast_compression设置为默认。服务器必须用--with-lz4编译才能支持这个功能。默认设置仍然是PGLZ。

3.1.6. 监控

3.1.7. 系统视图

3.1.8. 认证

  • 允许SSL证书的区分名称(DN)与客户端证书认证相匹配(Andrew Dunstan)

    新的pg_hba.conf选项clientname=DN允许与CN以外的证书属性进行比较,并可以与身份映射相结合。

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

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

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

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

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

3.1.9. 服务器配置

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会在崩溃恢复开始时打开数据库集群中的每个数据文件并进行fsync。一个新的设置,recovery_init_sync_method=syncfs,取代了同步集群使用的每个文件系统。这允许在有许多数据库文件的系统上更快恢复。

  • 增加函数pg_xact_commit_timestamp_origin(),以返回指定事务的提交时间戳和复制起源(Movead Li)

  • pg_last_committed_xact()返回的记录中添加复制原点 (Movead Li)

  • 允许使用标准函数权限控制复制origin functions(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, and Takamichi Osumi)

  • 立即将WAL-log子事务和顶层的`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)

    当逻辑复制被禁用时,在交易完成时生成WAL无效信息。这允许正在进行的交易的逻辑流。

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

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

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

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

    这比文本模式更快,但稳定性稍差。

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

  • 减少在没有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

  • 正确处理INSERT中多行VALUES列表中的DEFAULT条目 (Dean Rasheed)

    这种情况曾经抛出一个错误。

  • 添加SQL标准的SEARCHCYCLE子句用于普通表表达式 (Peter Eisentraut)

    使用现有的语法可以实现同样的结果,但要方便的多。

  • 允许 "ON CONFLICT "的 "WHERE "子句中的列名是符合表条件的 (Tom Lane)

    然而,只有目标表可以被引用。

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)

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

  • view definitions中为SQL定义的函数保留SQL标准语法(Tom Lane)

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

  • GRANTREVOKE中增加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工具分析系统目录。现有的目录的唯一索引现在有相关的UNIQUEPRIMARY KEY约束。外键关系实际上没有被存储或实现为约束条件,但可以从函数pg_get_catalog_foreign_keys()中获得显示。

  • 在接受 "CURRENT_ROLE "的地方都允许CURRENT_ROLE (Peter Eisentraut)

3.5. 数据类型

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

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

  • 允许对JSONB 进行下标 (Dmitry Dolgov)

    JSONB的下标可以用来提取和分配给JSONB文件的部分。

  • 增加对多区间数据类型 的支持(Paul Jungwirth, Alexander Korotkov)

    这些就像范围数据类型,但它们允许指定多个、有序、不重叠的范围。每个范围类型都会自动创建一个相关的多范围类型。

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

  • 允许tsearch数据文件具有无限的行长(Tom Lane)

    以前的限制是4K字节。同时删除函数t_readline()

  • numeric data type中增加对InfinityInfinity值的支持 (Tom Lane)

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

  • 增加点运算符 <<||>>代表严格的上/下限测试 (Emre Hasegeli)

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

  • 增加运算符来加减LSN和数字(字节)值 (Fujii Masao)

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

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

    长期以来,用户定义的关系都有与之相关的复合类型,以及这些复合类型的数组类型。现在系统目录也是如此。这一变化也修复了一个不一致的问题,即在单用户模式下创建一个用户定义的表将无法创建一个复合阵列类型。

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而不是anyarray参数. 这使得它们对参数类型的精确匹配不那么挑剔。

  • 添加SQL标准的 trim_array() 函数 (Vik Fearing)

    这已经可以用数组切片来完成,但不太容易。

  • 增加ltrim()rtrim()bytea等价物 (Joel Jacobson)

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

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

  • 增加string_to_table()函数,在定界符上分割字符串 (Pavel Stehule)

    这与regexp_split_to_table()函数类似。

  • 增加unistr()函数,允许Unicode字符被指定为字符串中的反斜线-hex转义 (Pavel Stehule)

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

  • 增加 bit_xor() XOR聚合函数 (Alexey Bashtanov)

  • 增加函数 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仍然接受这种语法。

  • 允许在正则表达式的括号内补充字符类转义[D](https://www.postgresql.org/docs/14/functions-matching.html#POSIX-ESCAPE-SEQUENCES)、SW`(Tom Lane)

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

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

  • 使非零的浮点值除以无穷大时返回零 (Kyotaro Horiguchi)

    以前这种操作会产生下溢错误。

  • 让NaN的浮点除以0返回NaN(Tom Lane)

    此前,这将返回一个错误。

  • 使exp()power()的负无穷指数返回0 (Tom Lane)

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

  • 提高涉及无穷大的几何计算的准确性(Tom Lane)

  • 在可能的情况下,将内置的类型协整函数标记为防漏(Tom Lane)。

    这允许在安全敏感的情况下更多地使用需要类型转换的函数。

  • 修改 pg_describe_object(), pg_identify_object(), 和 pg_identify_object_as_address(),以便对不存在的对象总是报告有用的错误信息 (Michael Paquier)

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

    这一变化允许对数组片断和嵌套记录字段进行赋值。

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

  • 提高plpgsql过程中重复CALL的性能(Pavel Stehule, Tom Lane)

3.8. 客户端接口

  • 在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实现的。

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_dumppg_dumpallpg_restore支持这一行为。

3.9.1. psql
  • 允许psql的dfdo命令指定函数和操作符的参数类型(Greg Sabino Mullane,Tom Lane

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

  • 在psql的\d[i|m|t]+输出中增加一个访问方法列(Georgios Kokolatos

  • 允许psql的dtdi显示TOAST表及其索引(Justin Pryzby)。

  • 增加psql命令dX以列出扩展统计对象(Tatsuro Yamada)。

  • 修复psql的dT以理解数组语法和后台语法别名,如intinteger(Greg Sabino Mullane,Tom Lane)。

  • 当用psql的e编辑前一个查询或文件时,或使用efev时,如果编辑器没有保存就退出,则忽略结果(Laurenz Albe)。

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

  • 改进标签完成(Vignesh C, Michael Paquier, Justin Pryzby, Georgios Kokolatos, Julien Rouhaud)

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)

    这个选项是不必要的,因为所有通过的选项已经可以直接指定。

3.11. 文档

  • 将 "Default Roles "更名为"Predefined Roles" (Bruce Momjian, Stephen Frost)

  • 增加factorial()函数的文档 (Peter Eisentraut)

    由于在这个版本中删除了 ! 操作符,factorial()是计算阶乘的唯一内置方法。

3.12. 源代码

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

    为了兼容,保留了--with-openssl的拼写。

  • 增加对 [abstract Unix-domain sockets] 的支持(https://www.postgresql.org/docs/14/runtime-config-connection.html#GUC-UNIX-SOCKET-DIRECTORIES) (Peter Eisentraut)

    目前在Linux和Windows上都支持。

  • 允许Windows正确处理大于四千兆字节的文件(Juan José Santamaría Flecha)

    例如这允许 COPY, WAL 文件,以及关系段文件大于四千兆字节。

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

    以前这种行为只能在编译时设置。要在initdb中调用它,请使用新的选项--discard-caches

  • 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)

  • 在索引访问方法API中增加amadjustmembers (Tom Lane)

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

  • libpq-fe.h中为最近添加的libpq特性提供特性测试宏(Tom Lane, Álvaro Herrera)

    历史上,应用程序通常使用编译时检查PG_VERSION_NUM来测试一个功能是否可用。但这通常是服务器的版本,对libpq的版本可能不是一个好的指导。libpq-fe.h现在提供了#define符号,表示v14中增加的应用程序可见的特性;目的是在未来的版本中继续增加这些特性的符号。

3.13. 附加模块

  • 允许对hstore值进行下标 (Tom Lane, Dmitry Dolgov)

  • 允许GiST/GIN pg_trgm索引做等价查找 (Julien Rouhaud)

    这与LIKE类似,只是不接受通配符。

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

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

  • 添加contrib模块pg_surgery,允许改变行的可见性(Ashutosh Sharma)

    这对纠正数据库损坏很有用。

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

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

    以前它只检查B-Tree索引页。

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

  • 将pageinspect块的编号改为bigints (Peter Eisentraut)

  • btree_gist 函数标记为并行安全 (Steven Winfield)

  • 将查询哈希计算从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)

3.13.2. postgres_fdw
  • 允许postgres_fdw批量INSERT行 (Takayuki Tsunakawa, Tomas Vondra, Amit Langote)

  • 如果通过IMPORT FOREIGN SCHEMA ... LIMIT TO指定,允许postgres_fdw导入表分区(Matthias van de Meent)

    默认情况下,只有分区表的根部被导入。

  • 增加postgres_fdw函数postgres_fdw_get_connections()来报告开放的外服务器连接 (Bharath Rupireddy)

  • 允许控制外部服务器在事务完成后是否保持连接打开 (Bharath Rupireddy)

    这是由keep_connections控制的,默认为开。

  • 允许postgres_fdw在必要时重新建立外部服务器连接 (Bharath Rupireddy)

    以前外部服务器重新启动可能会导致外部表访问错误。

  • 增加postgres_fdw函数来丢弃缓存的连接(Bharath Rupireddy)

4. 鸣谢

以下人员(按字母顺序排列)作为补丁作者、提交者、审查者、测试者或问题报告者对该版本做出了贡献。

……