受支持版本: 14

E.23. 发布版本 14 #

发布日期:. 2021-09-30

E.23.1. 概述 #

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

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

  • 已实现公共表表达式的 SQL 标准 SEARCHCYCLE 选项。

  • 下标运算现在可以应用于任何下标记法有意义的数据类型, 而不仅仅是数组。在此版本中,jsonbhstore 类型增加了下标操作符。

  • 范围类型已通过增加多范围类型进行扩展,允许表示非连续的数据范围。

  • 对并行查询、高并发工作负载、分区表、逻辑复制和清理进行了大量性能改进。

  • B-tree 索引更新管理更加高效,减少了索引膨胀。

  • 如果数据库开始接近事务 ID 回卷条件,VACUUM 会自动变得更加积极,并跳过非必要的清理。

  • 扩展统计信息现在可以收集表达式上的统计, 从而对复杂查询获得更好的规划结果。

  • libpq 现在具有管道化多个查询的能力, 这可以在高延迟连接上提高吞吐量。

上述项目和 PostgreSQL 14 的其他新特性 在下面的章节中有更详细的说明。

E.23.2. 迁移到版本 14 #

对于希望从任何先前版本迁移数据的用户,需要使用 pg_dumpall 进行导出/恢复,或使用 pg_upgrade 或逻辑复制。 有关迁移到新主版本的一般信息,请参见 Section 18.6

版本 14 包含许多可能影响与先前版本兼容性的变更。 请注意以下不兼容性:

  • 引用某些内置数组函数及其参数类型的用户定义对象必须重新创建(Tom Lane) §

    具体来说,array_append()array_prepend()array_cat()array_position()array_positions()array_remove()array_replace()width_bucket() 以前接受 anyarray 参数,但现在接受 anycompatiblearray。因此,引用这些数组函数 签名的用户定义对象(如聚合和操作符)必须在升级前删除, 并在升级完成后重新创建。

  • 移除内置几何数据类型和 contrib 模块 cubehstoreintarrayseg 中 已弃用的包含操作符 @~(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) §

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

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

    以前像 'inf' PRECEDING AND 'inf' FOLLOWING 这样的窗口帧子句会返回不正确的结果。

  • 移除阶乘操作符 !!!,以及函数 numeric_fac()(Mark Dilger) §

    factorial() 函数仍然受支持。

  • 禁止对负数使用 factorial()(Peter Eisentraut) §

    以前这种情况返回 1。

  • 移除对后缀(右一元)操作符的支持(Mark Dilger) §

    pg_dumppg_upgrade 在导出后缀操作符时会发出警告。

  • 正则表达式换行敏感模式下, 允许 \D\W 简写匹配换行符(Tom Lane) §

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

  • 在匹配正则表达式反向引用时忽略约束(Tom Lane) §

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

  • 禁止在正则表达式字符类中使用 \w 作为范围起点或终点(Tom Lane) §

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

  • 要求自定义服务器参数 名称仅使用在未加引号的 SQL 标识符中有效的字符(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.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 对版本 2 线路协议的支持(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) §

    负值会产生不良结果。

E.23.3. 变更 #

以下是 PostgreSQL 14 与上一个主版本之间变更的详细说明。

E.23.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() 增加可选的超时参数(Magnus Hagander) §

  • 允许宽元组始终被添加到几乎为空的堆页面中(John Naylor,Floris van Nee) §

    以前,插入会超过页面填充因子的元组 会被添加到新页面中。

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

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

E.23.3.1.1. 清理 #
  • 允许 vacuum 在可移除的索引条目数量不显著时跳过索引清理(Masahiko Sawada,Peter Geoghegan) § §

    vacuum 参数 INDEX_CLEANUP 有一个 新的默认值 auto 来启用此优化。

  • 允许 vacuum 更积极地将已删除的 btree 页面添加到空闲空间映射中(Peter Geoghegan) §

    以前 vacuum 只能将之前 vacuum 标记为已删除的页面添加到空闲空间映射中。

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

  • 允许 vacuum 在最小锁定索引操作期间更积极地删除死行(Á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 回卷时,使 vacuum 操作更加积极(Masahiko Sawada,Peter Geoghegan) §

    这由 vacuum_failsafe_agevacuum_multixact_failsafe_age 控制。

  • 增加事务 ID 和多事务回卷之前的警告时间和硬限制(Noah Misch) §

    这应该减少在未发出回卷警告的情况下发生故障的可能性。

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

E.23.3.1.2. 分区 #
  • 改进具有许多分区的分区表上更新和删除操作的性能(Amit Langote,Tom Lane) § § §

    此更改大大减少了此类情况下规划器的开销, 并且还允许分区表上的更新/删除使用执行时分区裁剪。

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

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

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

    以前任何此类子句必须匹配分区键的排序规则; 但更一致的做法是认为它会自动被强制转换为分区键的排序规则。

E.23.3.1.3. 索引 #
  • 允许 btree 索引添加操作移除过期索引条目以防止页面分裂(Peter Geoghegan) § §

    这对于减少索引列频繁更新的表的索引膨胀特别有用。

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

    如果每个页面范围中有多组值,这会很有用。

  • 允许 BRIN 索引使用布隆过滤器(Tomas Vondra) §

    这允许 BRIN 索引在数据在堆中不太集中的情况下有效使用。

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

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

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

E.23.3.1.4. 优化器 #
  • 允许对包含许多常量的 IN 子句使用哈希查找(James Coleman,David Rowley) §

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

  • 增加扩展统计信息可用于 OR 子句估计的场景数量(Tomas Vondra,Dean Rasheed) § § §

  • 允许对表达式创建扩展统计信息(Tomas Vondra) §

    这允许对一组表达式和列创建统计信息, 而不是像以前那样只能针对列。系统视图 pg_stats_ext_exprs 报告此类统计信息。

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

    以前非等值 TID 规范需要顺序扫描。

  • 修复 EXPLAIN CREATE TABLE ASEXPLAIN CREATE MATERIALIZED VIEW 以遵守 IF NOT EXISTS(Bharath Rupireddy) §

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

E.23.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) §

    如果设置了 async_capablepostgres_fdw 支持这种类型的扫描。

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

    这由 maintenance_io_concurrency 控制。

  • 改进正则表达式搜索的性能(Tom Lane) § § § § § § § § § § §

  • 大幅提高 Unicode 规范化性能(John Naylor) § §

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

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

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

E.23.3.1.6. 监控 #
E.23.3.1.7. 系统视图 #
E.23.3.1.8. 认证 #
  • 允许匹配 SSL 证书的专有名称(DN)用于客户端证书认证(Andrew Dunstan) §

    新的 pg_hba.conf 选项 clientname=DN 允许与 CN 以外的证书属性进行比较,并可与 ident 映射组合使用。

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

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

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

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

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

E.23.3.1.9. 服务器配置 #

E.23.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) §

  • 允许使用标准函数权限控制来控制复制来源 函数(Martín Marqués) §

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

E.23.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) §

  • 立即将子事务和顶层 XID 关联写入 WAL 日志(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.23.3.3. SELECTINSERT #

  • 减少不使用 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 CONFLICTWHERE 子句中的列名使用表限定(Tom Lane) §

    但是,只能引用目标表。

E.23.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) §

  • 视图定义中保留 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_USER 的每个地方都允许 CURRENT_ROLE(Peter Eisentraut) §

E.23.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) §

    以前这些叫做 >^<^,但该命名与其他几何数据类型不一致。 旧名称仍然可用,但将来可能被移除。

  • 增加 LSN 和 numeric(字节)值的加减操作符(Fujii Masao) §

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

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

    用户定义的关系长期以来就有关联的复合类型,也有这些复合类型上的数组类型。 系统目录现在也是如此。此更改还修复了在单用户模式下 创建用户定义表时无法创建复合数组类型的不一致性。

E.23.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) §

    使用数组切片也可以实现此功能,但不那么方便。

  • 增加 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() 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\S\W(Tom Lane) §

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

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

  • 使非零浮点值除以无穷大返回零(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.23.3.7. PL/pgSQL #

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

    此更改允许赋值到数组切片和嵌套记录字段。

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

  • 改进 plpgsql 过程中重复 CALL 的性能(Pavel Stehule,Tom Lane) §

E.23.3.8. 客户端接口 #

  • 为 libpq 增加管道模式(Craig Ringer,Matthieu Garrigues,Álvaro Herrera) §

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

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

    新选项为 read-onlyprimarystandbyprefer-standby

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

  • 允许将 ECPG SQL 标识符链接到特定连接(Hayato Kuroda) §

    这通过 DECLARE ... STATEMENT 完成。

E.23.3.9. 客户端应用程序 #

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

    选项为 --no-index-cleanup--no-truncate

  • 允许 pg_dump 仅导出特定扩展(Guillaume Lelarge) §

    这由选项 --extension 控制。

  • 增加 pgbenchpermute() 函数以随机打乱值(Fabien Coelho,Hironobu Suzuki,Dean Rasheed) §

  • pgbench 使用 -C 选项 测量的重连开销中包含断开连接时间(Yugo Nagata) §

  • 允许多次指定详细选项(-v)以增加日志详细程度(Tom Lane) §

    pg_dumppg_dumpallpg_restore 支持此行为。

E.23.3.9.1. psql #
  • 允许 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.23.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.23.3.11. 文档 #

  • 将"默认角色"重命名为"预定义角色"(Bruce Momjian,Stephen Frost) §

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

    随着此版本移除了 ! 操作符,factorial() 是计算阶乘的唯一内置方式。

E.23.3.12. 源代码 #

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

    保留 --with-openssl 拼写以兼容。

  • 增加对抽象 Unix 域套接字的支持(Peter Eisentraut) §

    目前在 LinuxWindows 上受支持。

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

    例如,这允许 COPYWAL 文件和关系段文件大于 4GB。

  • 增加服务器参数 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 中添加的应用程序可见功能; 意图是在将来的版本中继续为此类功能添加符号。

E.23.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 块号改为 bigint(Peter Eisentraut) §

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

E.23.3.13.1. pg_stat_statements #
  • 将查询哈希计算从 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.23.3.13.2. postgres_fdw #
  • 允许 postgres_fdw 批量 INSERT 行(Takayuki Tsunakawa,Tomas Vondra,Amit Langote) § §

  • 允许 postgres_fdwIMPORT 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.23.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

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。