选择 打开 改范围 完整检索页
不受支持的版本: 13
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本手册首页的对应页面,或其他在上面列出的活跃大版本。

E.24. 发布版本 13 #

发布日期:. 2020-09-24

E.24.1. 概述

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

  • 通过 B-树索引条目去重节省空间并提升性能

  • 提高使用聚合或分区表的查询的性能

  • 使用扩展统计信息时获得更好的查询计划

  • 并行清理索引

  • 增量排序

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

E.24.2. 迁移到版本 13

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

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

  • SIMILAR TO ... ESCAPE NULL 改为返回 NULL(Tom Lane) §

    这一新行为符合 SQL 规范。以前,ESCAPE 为空值时,被解释为使用默认转义字符串(反斜杠字符)。这也适用于 substring(text FROM pattern ESCAPE text)。通过保持原函数不变,在旧视图中保留了以前的行为。

  • 使 json[b]_to_tsvector() 完整检查其 string 选项的拼写(Dominik Czarnota) §

  • 改变非默认的 effective_io_concurrency 值影响并发度的方式(Thomas Munro) §

    以前,该值在用于设置并发请求数之前会经过调整。现在直接使用该值。可以通过以下方式将旧值转换为新值:

    SELECT round(sum(OLDVALUE / n::float)) AS newvalue FROM generate_series(1, OLDVALUE) s(n);
    
  • 不再在 pg_stat_sslpg_stat_gssapi 系统视图中显示辅助进程(Euler Taveira) §

    如果查询将这些视图与 pg_stat_activity 连接,并希望看到辅助进程,就需要使用左连接。

  • 重命名多种等待事件以提高一致性(Fujii Masao,Tom Lane) § § § § §

  • 修复 ALTER FOREIGN TABLE ... RENAME COLUMN,使其返回更合适的命令标签(Fujii Masao) §

    以前返回 ALTER TABLE;现在返回 ALTER FOREIGN TABLE

  • 修复 ALTER MATERIALIZED VIEW ... RENAME COLUMN,使其返回更合适的命令标签(Fujii Masao) §

    以前返回 ALTER TABLE;现在返回 ALTER MATERIALIZED VIEW

  • 将配置参数 wal_keep_segments 重命名为 wal_keep_size(Fujii Masao) §

    这决定为备库保留多少 WAL。它以 MB 为单位指定,而旧参数以文件数量指定。如果以前使用 wal_keep_segments,以下公式可以得到大致等价的设置:

    wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
    
  • 移除使用 PostgreSQL 8.0 之前的语法定义操作符类的支持(Daniel Gustafsson) §

  • 移除使用 PostgreSQL 7.3 之前的语法定义外键约束的支持(Daniel Gustafsson) §

  • 移除对 PostgreSQL 7.3 之前的服务器所使用的 "opaque" 伪类型的支持(Daniel Gustafsson) §

  • 移除对升级未打包扩展(9.1 之前的扩展)的支持(Tom Lane) §

    CREATE EXTENSION 不再支持 FROM 选项。任何仍使用未打包扩展的安装实例,都应在更新到 PostgreSQL 13 之前,将这些扩展升级为已打包的版本。

  • 移除对时区数据库中 posixrules 文件的支持(Tom Lane) §

    IANA 的时区工作组已弃用此特性,这意味着它将在未来几年中逐渐从系统的时区数据库中消失。为避免时区数据更新意外引发行为变化,我们从版本 13 开始移除了 PostgreSQL 对此特性的支持。这只影响缺少显式夏令时切换规则的 POSIX 风格时区指定的行为;以前可以通过安装自定义 posixrules 文件来确定切换规则,现在则使用硬编码规则。对于受影响的安装实例,建议改用地理时区名称。

  • ltree 中,当 lquery 模式包含相邻的带花括号星号时,例如 *{2}.*{3},将其正确解释为 *{5}(Nikita Glukhov) §

  • 修复 pageinspectbt_metap(),使其返回更合适、不易溢出的数据类型(Peter Geoghegan) §

E.24.3. 变更

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

E.24.3.1. 服务器

E.24.3.1.1. 分区
  • 允许在更多情况下进行分区剪枝(Yuzuko Hosoya,Amit Langote,Álvaro Herrera) § §

  • 允许在更多情况下进行逐分区连接(Ashutosh Bapat,Etsuro Fujita,Amit Langote,Tom Lane) § §

    例如,即使分区边界并不完全匹配,现在也可以在分区表之间进行逐分区连接。

  • 支持分区表上的行级 BEFORE 触发器(Álvaro Herrera) §

    但是,不允许此类触发器改变目标分区。

  • 允许通过发布对分区表进行逻辑复制(Amit Langote) § §

    以前,必须逐个复制分区。现在可以显式发布分区表,从而自动发布其所有分区。添加或移除分区时,也会将其相应地添加到发布或从发布中移除。CREATE PUBLICATIONpublish_via_partition_root 选项控制分区变更是作为分区自身的变更发布,还是作为父表的变更发布。

  • 允许逻辑复制写入订阅者上的分区表(Amit Langote) §

    以前,订阅者只能将接收到的行写入非分区表。

  • 允许在分区表达式中使用整行变量(即 table.*)(Amit Langote) §

E.24.3.1.2. 索引
  • 更高效地存储 B-树索引中的重复项(Anastasia Lubennikova,Peter Geoghegan) §

    这通过只存储一次重复键,使低基数列能够高效地使用 B-树索引。使用 pg_upgrade 升级的用户,需要执行 REINDEX 才能让现有索引使用这一特性。

  • 允许 box 列上的 GiSTSP-GiST 索引支持 ORDER BY box <-> point 查询(Nikita Glukhov) § §

  • 允许 GIN 索引更高效地处理 tsquery 搜索中的 !(NOT)子句(Nikita Glukhov,Alexander Korotkov,Tom Lane,Julien Rouhaud) §

  • 允许索引操作符类接受参数(Nikita Glukhov) §

  • 允许 CREATE INDEX 指定 GiST 签名长度和整数范围的最大数量(Nikita Glukhov) §

    在四字节和八字节整数数组tsvectorpg_trgmltreehstore 列上创建的索引,现在可以控制这些 GiST 索引参数,而不再只能使用默认值。

  • 禁止将使用非默认排序规则的索引添加为表的唯一约束或主键约束(Tom Lane) §

    索引的排序规则必须与底层列的排序规则匹配,但 ALTER TABLE 以前未检查这一点。

E.24.3.1.3. 优化器
  • 改进优化器对包含和匹配操作符的选择率估计(Tom Lane) §

  • 允许为扩展统计信息设置统计目标(Tomas Vondra) §

    这通过新的命令选项 ALTER STATISTICS ... SET STATISTICS 控制。以前,它基于更通用的统计目标设置计算得出。

  • 允许在单个查询中使用多个扩展统计对象(Tomas Vondra) § §

  • 允许将扩展统计对象用于 OR 子句和 IN/ANY 常量列表(Pierre Ducroquet,Tomas Vondra) § § §

  • 如果 FROM 子句中的函数求值为常量,则允许将其上拉(内联)(Alexander Kuzmenkov,Aleksandr Parfenov) § §

E.24.3.1.4. 一般性能
  • 实现增量排序(James Coleman,Alexander Korotkov,Tomas Vondra) § §

    如果已知查询的中间结果按照所需排序顺序的一个或多个前导键排好序,则可以将前导键相同的行分批排序,只考虑剩余键即可完成额外的排序。

    如有需要,可以使用 enable_incremental_sort 控制此行为。

  • 提高 inet 值的排序性能(Brandur Leach) §

  • 允许哈希聚合对大型聚合结果集使用磁盘存储(Jeff Davis) § § §

    以前,如果预计哈希聚合使用的内存会超过 work_mem,就会避免使用它。现在,即使如此也可以选择哈希聚合计划。如果哈希表超过 work_mem 乘以 hash_mem_multiplier 的大小,就会溢写到磁盘。

    这一行为通常优于旧行为:以前,一旦选择了哈希聚合,无论哈希表增长到多大,都会一直保留在内存中;如果规划器估计有误,它可能变得非常大。如有需要,可以通过增大 hash_mem_multiplier 来获得类似旧行为的效果。

  • 允许插入操作也触发自动清理中的清理活动,而不再仅由更新和删除触发(Laurenz Albe,Darafei Praliaskouski) §

    以前,仅有插入活动时会触发自动分析,但不会触发自动清理,理由是不存在需要移除的死元组。然而,清理扫描还有其他有益的副作用,例如设置页面全可见位,从而提高仅索引扫描的效率。另外,让仅插入的表接受周期性清理,有助于分散冻结旧元组的工作量,避免整个表同时达到防回卷阈值时,突然需要执行大量冻结工作。

    如有需要,可以通过新参数 autovacuum_vacuum_insert_thresholdautovacuum_vacuum_insert_scale_factor,或等价的表存储选项来调整此行为。

  • 增加 maintenance_io_concurrency 参数,以控制维护操作的 I/O 并发度(Thomas Munro) §

  • 如果 wal_levelminimal,则允许在创建或重写关系的事务期间跳过 WAL 写入(Kyotaro Horiguchi) §

    对于大于 wal_skip_threshold 的关系,会对其文件执行 fsync,而不生成 WAL。以前,只有 COPY 操作会这样处理,但其实现有一个缺陷,可能在崩溃恢复期间导致数据丢失。

  • 提高使用大量表空间时重放 DROP DATABASE 命令的性能(Fujii Masao) §

  • 提高截断超大关系的性能(Kirk Jamison) §

  • 改进对经过 TOAST 处理的值的起始字节的获取(Binguo Bao,Andrey Borodin) §

    以前,即使已知只需要起始的一部分字节,也会完整获取压缩的行外 TOAST 值。现在,只获取足以生成结果的数据。

  • 提高 LISTEN/NOTIFY 的性能(Martijn van Oosterhout,Tom Lane) § § §

  • 加快整数到文本的转换(David Fetter) §

  • 减少包含大量 SQL 语句的查询字符串和扩展脚本的内存用量(Amit Langote) §

E.24.3.1.5. 监控
E.24.3.1.6. 系统视图
E.24.3.1.7. 等待事件
  • 使用 posix_fallocate() 创建 DSM 段时报告等待事件(Thomas Munro) §

  • 增加等待事件 VacuumDelay,以报告基于代价的清理延迟(Justin Pryzby) §

  • WAL 归档和恢复暂停增加等待事件(Fujii Masao) §

    新增事件为 BackupWaitWalArchive 和 RecoveryPause。

  • 增加等待事件 RecoveryConflictSnapshot 和 RecoveryConflictTablespace,以监控恢复冲突(Masahiko Sawada) §

  • 提高基于 BSD 的系统上的等待事件性能(Thomas Munro) §

E.24.3.1.8. Authentication
  • 只允许超级用户查看 ssl_passphrase_command 设置(Insung Moon) §

    此项修改出于安全考虑。

  • 将服务器加密连接默认允许的最低 TLS 版本从 1.0 改为 1.2(Peter Eisentraut) §

    可以通过 ssl_min_protocol_version 控制这一选择。

E.24.3.1.9. 服务器配置
  • 收紧关于只读事务模式下允许执行哪些实用命令的规则(Robert Haas) §

    此项修改还增加了可在并行查询中运行的实用命令数量。

  • 允许在服务器启动后修改 allow_system_table_mods(Peter Eisentraut) §

  • 在设置 allow_system_table_mods 时,禁止非超级用户修改系统表(Peter Eisentraut) §

    以前,如果在服务器启动时设置了 allow_system_table_mods,非超级用户就可以对系统表执行 INSERT/UPDATE/DELETE 命令。

  • 在 Windows 上启用 Unix 域套接字支持(Peter Eisentraut) §

E.24.3.2. 流复制和恢复

  • 允许通过重载更改流复制配置设置(Sergei Kornilov) §

    以前,更改 primary_conninfoprimary_slot_name 需要重启服务器。

  • 允许 WAL 接收进程在未指定永久复制槽时使用临时复制槽(Peter Eisentraut,Sergei Kornilov) § §

    可以使用 wal_receiver_create_temp_slot 启用此行为。

  • 允许通过 max_slot_wal_keep_size 限制复制槽的 WAL 存储量(Kyotaro Horiguchi) §

    需要超过此值的复制槽会被标记为无效。

  • 允许备库提升取消任何已请求的暂停(Fujii Masao) §

    以前,备库处于暂停状态时无法提升。

  • 如果恢复未到达指定的恢复目标,则产生错误(Leif Gunnar Erlandsen,Peter Eisentraut) §

    以前,即使未到达目标,备库也会在到达 WAL 末尾时自行提升。

  • 允许控制逻辑解码在溢写到磁盘之前可以使用多少内存(Tomas Vondra,Dilip Kumar,Amit Kapila) §

    这由 logical_decoding_work_mem 控制。

  • 允许在 WAL 引用无效页面时仍继续恢复(Fujii Masao) §

    可以使用 ignore_invalid_pages 启用此功能。

E.24.3.3. 工具命令

  • 允许 VACUUM 并行处理一个表的各个索引(Masahiko Sawada,Amit Kapila) §

    新增的 PARALLEL 选项控制此行为。

  • 允许 FETCH FIRST 使用 WITH TIES 返回与最后一个结果行的排序值相同的所有额外行(Surafel Temesgen) §

  • EXPLAINBUFFER 输出中报告规划期间的缓冲区使用情况(Julien Rouhaud) §

  • 使 CREATE TABLE LIKECHECK 约束的 NO INHERIT 属性传递给所创建的表(Ildar Musin,Chris Travers) §

  • 对分区表使用 LOCK TABLE 时,不检查子表上的权限(Amit Langote) §

  • 允许向标识列插入时使用 OVERRIDING USER VALUE(Dean Rasheed) §

  • 增加 ALTER TABLE ... DROP EXPRESSION,以允许移除列的 GENERATED 属性(Peter Eisentraut) §

  • 修复多步骤 ALTER TABLE 命令中的缺陷(Tom Lane) §

    IF NOT EXISTS 子句现在按预期工作:如果列已存在,就不会执行派生操作(例如创建索引)。另外,将相关操作合并到一条 ALTER TABLE 中的某些情况,以前无法正常工作,现在也已可用。

  • 增加用于重命名视图列的 ALTER VIEW 语法(Fujii Masao) §

    以前已经可以重命名视图列,但必须写成 ALTER TABLE RENAME COLUMN,这令人困惑。

  • 增加 ALTER TYPE 选项,以修改基础类型的 TOAST 属性和支持函数(Tomas Vondra,Tom Lane) §

  • 增加 CREATE DATABASELOCALE 选项(Peter Eisentraut) §

    这将现有的 LC_COLLATELC_CTYPE 选项合并为单个选项。

  • 允许 DROP DATABASE 断开正在使用目标数据库的会话,以使删除成功(Pavel Stehule,Amit Kapila) §

    这通过 FORCE 选项启用。

  • 增加结构成员 tg_updatedcols,使 C 语言更新触发器能够知道哪些列被更新(Peter Eisentraut) §

E.24.3.4. 数据类型

  • 增加多态数据类型,供要求参数类型兼容的函数使用(Pavel Stehule) §

    新增数据类型为 anycompatibleanycompatiblearrayanycompatiblenonarrayanycompatiblerange

  • 增加 SQL 数据类型 xid8,以对外提供 FullTransactionId(Thomas Munro) §

    现有的 xid 数据类型只有四字节,因此不包含事务纪元。

  • 增加数据类型 regcollation 及相关函数,以表示排序规则对象的 OID(Julien Rouhaud) §

  • 在某些情况下使用 glibc 版本作为排序规则版本标识符(Thomas Munro) §

    如果 glibc 版本发生变化,将发出警告,提示依赖排序规则的索引可能损坏。

  • 增加 Windows 上的排序规则版本支持(Thomas Munro) §

  • 允许通过后缀记法提取 ROW 表达式的成员(Tom Lane) §

    例如,(ROW(4, 5.0)).f1 现在返回 4。

E.24.3.5. 函数

  • 增加 jsonb_set() 的另一个版本,改进对 NULL 的处理(Andrew Dunstan) §

    新函数 jsonb_set_lax() 根据请求处理值为 NULL 的新值:将指定键设为 JSON null、删除该键、抛出异常,或返回未经修改的 jsonb 值。

  • 增加 jsonpath 的 .datetime() 方法(Nikita Glukhov,Teodor Sigaev,Oleg Bartunov,Alexander Korotkov) §

    此函数允许将 JSON 值转换为时间戳,随后即可在 jsonpath 表达式中处理这些时间戳。此项修改还增加了支持时区感知输出的 jsonpath 函数。

  • 增加 SQL 函数 NORMALIZE(),以规范化 Unicode 字符串,并增加 IS NORMALIZED 来检查是否已规范化(Peter Eisentraut) §

  • pg_lsn 增加 min()max() 聚合(Fabrízio de Royes Mello) §

    这些聚合在监控查询中特别有用。

  • 允许Unicode 转义,例如 E'\unnnn'U&'\nnnn',指定数据库编码中可用的任何字符,即使数据库编码不是 UTF-8(Tom Lane) §

  • 允许 to_date()to_timestamp() 识别非英语的月份名和星期名(Juan José Santamaría Flecha,Tom Lane) §

    可识别的名称与 to_char() 使用相同格式模式输出的名称相同。

  • 增加日期时间格式模式 FF1FF6,以指定输入或输出 1 到 6 位小数秒(Alexander Korotkov,Nikita Glukhov,Teodor Sigaev,Oleg Bartunov) §

    这些模式可用于 to_char()to_timestamp() 和 jsonpath 的 .datetime()

  • 增加日期时间格式模式 SSSSS,作为 SSSSSQL 标准别名(Nikita Glukhov,Alexander Korotkov) §

  • 增加函数 gen_random_uuid(),以生成版本 4 UUID(Peter Eisentraut) §

    以前,UUID 生成函数只在外部模块 uuid-ossppgcrypto 中提供。

  • 增加最大公约数(gcd)和最小公倍数(lcm)函数(Vik Fearing) §

  • 提高 numeric 类型的平方根sqrt)和自然对数(ln)函数的性能与精度(Dean Rasheed) § §

  • 增加函数 min_scale(),返回完整精确表示 numeric 值所需的小数点右侧位数(Pavel Stehule) §

  • 增加函数 trim_scale(),通过移除尾随零来减少 numeric 值的小数位数(Pavel Stehule) §

  • 增加距离操作符的交换子(Nikita Glukhov) §

    例如,以前只支持 point <-> line,现在 line <-> point 也可以使用。

  • 为所有事务 ID 函数创建 xid8 版本(Thomas Munro) §

    为保持向后兼容,基于 xid 的旧函数仍然存在。

  • 允许 get_bit()set_bit() 设置 bytea 值前 256MB 之外的位(Movead Li) §

  • 允许在某些并行操作中使用咨询锁函数(Tom Lane) §

  • 增加移除对象对扩展依赖的能力(Álvaro Herrera) §

    对象可以是函数、物化视图、索引或触发器。语法为 ALTER .. NO DEPENDS ON

E.24.3.6. PL/pgSQL

  • 提高简单 PL/pgSQL 表达式的性能(Tom Lane,Amit Langote) §

  • 提高使用不可变表达式的 PL/pgSQL 函数的性能(Konstantin Knizhnik) §

E.24.3.7. 客户端接口

  • 允许 libpq 客户端要求加密连接使用通道绑定(Jeff Davis) §

    使用 libpq 连接参数 channel_binding,会强制 TLS 连接的另一端证明它知道用户的密码。这可以防止中间人攻击。

  • 增加 libpq 连接参数,以控制加密连接允许的最低和最高 TLS 版本(Daniel Gustafsson) § § §

    这些设置为 ssl_min_protocol_versionssl_max_protocol_version。默认最低 TLS 版本为 1.2(这与以前的发行版相比是行为上的变化)。

  • 允许使用密码解锁客户端证书(Craig Ringer,Andrew Dunstan) §

    这通过 libpq 的 sslpassword 连接参数启用。

  • 允许 libpq 使用 DER 编码的客户端证书(Craig Ringer,Andrew Dunstan) §

  • 修复 ecpgEXEC SQL elif 指令,使其正确工作(Tom Lane) §

    以前,它的行为与 endif 后跟 ifdef 相同,因此即使同一 if 结构中的前一个分支已成功匹配,也不会阻止展开 elif 分支或后续分支。

E.24.3.8. 客户端应用程序

E.24.3.8.1. psql
  • 将事务状态(%x)添加到 psql 的默认提示符中(Vik Fearing) §

  • 允许 psql 的次级提示符为空白,但与主提示符具有相同宽度(Thomas Munro) §

    这通过将 PROMPT2 设为 %w 实现。

  • 允许 psql\g\gx 命令只在该条命令执行期间更改 \pset 输出选项(Tom Lane) §

    此特性允许使用 \g (expand=on) 这样的语法,它等价于 \gx

  • 增加用于显示操作符类和操作符族的 psql 命令(Sergey Cherkashin,Nikita Glukhov,Alexander Korotkov) §

    新增命令为 \dAc\dAf\dAo\dAp

  • psql\dt+ 及相关命令中显示表的持久性(David Fetter) §

    在详细模式下,表、索引和视图的显示会指出对象是永久的、临时的,还是不记录 WAL 的。

  • 改进 psql\dTOAST 表的输出(Justin Pryzby) §

  • 修复 psql\e 命令之后的重新显示(Tom Lane) §

    退出编辑器时,如果查询不以分号或 \g 结尾,现在会显示查询缓冲区的内容。

  • psql 增加 \warn 命令(David Fetter) §

    这与 \echo 类似,但文本发送到 stderr,而非 stdout。

  • PostgreSQL 主页添加到命令行 --help 输出中(Peter Eisentraut) §

E.24.3.8.2. pgbench
  • 允许 pgbench 对其 accounts 表进行分区(Fabien Coelho) §

    这使分区性能测试成为可能。

  • 增加 pgbench 命令 \aset,其行为类似 \gset,但适用于多个查询(Fabien Coelho) §

  • 允许 pgbench 在服务器端而非客户端生成初始数据(Fabien Coelho) §

  • 允许 pgbench 使用 --show-script 选项显示脚本内容(Fabien Coelho) §

E.24.3.9. 服务器应用程序

  • 为基础备份生成备份清单,并验证备份(Robert Haas) § §

    新工具 pg_verifybackup 可以验证备份。

  • 使 pg_basebackup 默认估计备份总大小(Fujii Masao) §

    这一计算使 pg_stat_progress_basebackup 能够显示进度。如果不需要,可以使用 --no-estimate-size 选项禁用它。以前,只有使用 --progress 选项时才会进行这一计算。

  • pg_rewind 增加配置备库的选项(Paul Guo,Jimmy Yih,Ashwin Agrawal) §

    这与 pg_basebackup--write-recovery-conf 选项一致。

  • 允许 pg_rewind 使用目标集群的 restore_command 获取所需的 WAL(Alexey Kondratov) §

    这通过 -c/--restore-target-wal 选项启用。

  • 使 pg_rewind 在回退之前自动运行崩溃恢复(Paul Guo,Jimmy Yih,Ashwin Agrawal) §

    可以使用 --no-ensure-shutdown 禁用此行为。

  • 增加 pg_waldump 报告的 PREPARE TRANSACTION 相关信息(Fujii Masao) §

  • 增加 pg_waldump 选项 --quiet,以抑制非错误输出(Andres Freund,Robert Haas) §

  • 增加 pg_dump 选项 --include-foreign-data,以转储外部服务器上的数据(Luis Carril) §

  • 允许 vacuumdb 运行的清理命令以并行模式执行(Masahiko Sawada) §

    这通过新增的 --parallel 选项启用。

  • 允许 reindexdb 并行运行(Julien Rouhaud) §

    并行模式通过新增的 --jobs 选项启用。

  • 允许 dropdb 断开正在使用目标数据库的会话,以使删除成功(Pavel Stehule) §

    这通过 -f 选项启用。

  • createuser 中移除 --adduser--no-adduser(Alexander Lakhin) §

    长期以来,用于此目的的推荐选项是 --superuser--no-superuser

  • 运行 pg_upgrade 时,将 pg_upgrade 程序所在的目录用作默认的 --new-bindir 设置(Daniel Gustafsson) §

E.24.3.10. 文档

E.24.3.11. 源代码

  • 增加使用 Visual Studio 2019 构建的支持(Haribabu Kommi) §

  • 增加 MSYS2 构建支持(Peter Eisentraut) §

  • 为 Power PC 编译器增加 compare_exchange 和 fetch_add 的汇编代码(Noah Misch) §

  • 更新全文搜索使用的 Snowball 词干提取器词典(Panagiotis Mavrogiorgos) §

    这增加了希腊语词干提取,并改进了丹麦语和法语的词干提取。

  • 移除对 Windows 2000 的支持(Michael Paquier) §

  • 移除对非 ELFBSD 系统的支持(Peter Eisentraut) §

  • 移除对 Python 2.5.X 及更早版本的支持(Peter Eisentraut) §

  • 移除对 OpenSSL 0.9.8 和 1.0.0 的支持(Michael Paquier) §

  • 移除 configure 选项 --disable-float8-byval--disable-float4-byval(Peter Eisentraut) § §

    这些内容曾用于兼容某些版本零 C 函数,但那些函数已不再受支持。

  • 将查询字符串传递给规划器钩子函数(Pascal Legrand,Julien Rouhaud) §

  • 增加 TRUNCATE 命令钩子(Yuli Khodorkovskiy) §

  • 增加 TLS 初始化钩子(Andrew Dunstan) §

  • 允许在不预定义 Unix 域套接字目录的情况下构建(Peter Eisentraut) §

  • 降低 Unix 平台上 SysV 资源键冲突的概率(Tom Lane) §

  • 使用操作系统函数可靠地擦除包含敏感信息的内存(Peter Eisentraut) §

    例如,可用它清除存储在内存中的密码。

  • 增加 headerscheck 脚本以测试 C 头文件的兼容性(Tom Lane) §

  • 将内部列表实现为数组,而不再采用单元链表(Tom Lane) §

    这提高了访问大量对象的查询的性能。

  • 修改 TS_execute() 的 API(Tom Lane,Pavel Borisov) § §

    TS_execute 回调现在必须提供三值(是、否、可能)逻辑。现在默认准确计算 NOT 查询。

E.24.3.12. 附加模块

  • 允许将扩展指定为可信(Tom Lane) §

    拥有数据库级 CREATE 权限的用户,即使不是超级用户,也可以在数据库中安装这类扩展。此项修改还移除了 pg_pltemplate 系统目录。

  • 允许非超级用户不使用密码就连接到 postgres_fdw 外部服务器(Craig Ringer) §

    具体来说,允许超级用户将某个用户映射password_required 设置为 false。仍须注意防止非超级用户使用超级用户凭据连接到外部服务器。

  • 允许 postgres_fdw 使用证书认证(Craig Ringer) §

    不同用户可以使用不同证书。

  • 允许 sepgsql 控制对 TRUNCATE 命令的访问(Yuli Khodorkovskiy) §

  • 增加扩展 bool_plperl,以在 SQL 布尔值和 PL/Perl 布尔值之间进行双向转换(Ivan Panchenko) §

  • 使 pg_stat_statementsSELECT ... FOR UPDATE 命令与不带 FOR UPDATE 的命令分别处理(Andrew Gierth,Vik Fearing) §

  • 允许 pg_stat_statements 选择性地跟踪语句的规划时间(Julien Rouhaud,Pascal Legrand,Thomas Munro,Fujii Masao) § §

    以前只跟踪执行时间。

  • 全面修改 ltree 的 lquery 语法,使其对 NOT(!)的处理更符合逻辑(Filip Rembialkowski,Tom Lane,Nikita Glukhov) § §

    另外,允许非 * 查询使用数值范围({})指定匹配次数。

  • 增加 ltree、lquery 和 ltxtquery 类型的二进制 I/O 支持(Nino Floris) §

  • dict_int 增加忽略整数符号的选项(Jeff Janes) §

  • 增加 adminpack 函数 pg_file_sync(),以允许对文件执行 fsync(Fujii Masao) §

  • 增加 pageinspect 函数,以人类可读的格式输出 t_infomask/t_infomask2 值(Craig Ringer,Sawada Masahiko,Michael Paquier) § §

  • 向 pageinspect 输出添加 B-树索引去重处理相关列(Peter Geoghegan) §

E.24.4. 致谢 #

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

Abhijit Menon-Sen
Adam Lee
Adam Scott
Adé Heyward
Adrien Nayrat
Ahsan Hadi
Alastair McKinley
Aleksandr Parfenov
Alex Aktsipetrov
Alex Macy
Alex Shulgin
Alexander Korotkov
Alexander Kukushkin
Alexander Kuzmenkov
Alexander Lakhin
Alexey Bashtanov
Alexey Kondratov
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Andreas Joseph Krogh
Andreas Karlsson
Andreas Kunert
Andreas Seltenreich
Andrei Zubkov
Andres Freund
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrey Borodin
Andrey Klychkov
Andrey Lepikhov
Anna Akenteva
Anna Endo
Anthony Nowocien
Anton Vlasov
Antonin Houska
Ants Aasma
Arne Roland
Arnold Müller
Arseny Sher
Arthur Nascimento
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Ashwin Agrawal
Asif Rehman
Asim Praveen
Atsushi Torikoshi
Augustinas Jokubauskas
Austin Drenski
Basil Bourque
Beena Emerson
Ben Cornett
Benjie Gillam
Benoît Lobréau
Bernd Helmle
Bharath Rupireddy
Bhargav Kamineni
Binguo Bao
Brad DeJong
Brandur Leach
Brent Bates
Brian Williams
Bruce Momjian
Cameron Ezell
Cary Huang
Chapman Flack
Charles Offenbacher
Chen Huajun
Chenyang Lu
Chris Bandy
Chris Travers
Christoph Berg
Christophe Courtois
Corey Huinker
Craig Ringer
Cuiping Lin
Dagfinn Ilmari Mannsåker
Daniel Fiori
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Darafei Praliaskouski
Daryl Waycott
Dave Cramer
David Christensen
David Fetter
David G. Johnston
David Gilman
David Harper
David Rowley
David Steele
David Zhang
Davinder Singh
Dean Rasheed
Denis Stuchalin
Dent John
Didier Gautheron
Dilip Kumar
Dmitry Belyavsky
Dmitry Dolgov
Dmitry Ivanov
Dmitry Telpt
Dmitry Uspenskiy
Dominik Czarnota
Dongming Liu
Ed Morley
Edmund Horner
Emre Hasegeli
Eric Gillum
Erik Rijkers
Erwin Brandstetter
Ethan Waldo
Etsuro Fujita
Eugen Konkov
Euler Taveira
Fabien Coelho
Fabrízio de Royes Mello
Felix Lechner
Filip Janus
Filip Rembialkowski
Frank Gagnepain
Georgios Kokolatos
Gilles Darold
Greg Nancarrow
Grigory Smolkin
Guancheng Luo
Guillaume Lelarge
Hadi Moshayedi
Haiying Tang
Hamid Akhtar
Hans Buschmann
Hao Wu
Haribabu Kommi
Haruka Takatsuka
Heath Lord
Heikki Linnakangas
Himanshu Upadhyaya
Hironobu Suzuki
Hugh McMaster
Hugh Ranalli
Hugh Wang
Ian Barwick
Ibrar Ahmed
Ildar Musin
Insung Moon
Ireneusz Pluta
Isaac Morland
Ivan Kartyshov
Ivan Panchenko
Ivan Sergio Borgonovo
Jaime Casanova
James Coleman
James Gray
James Hunter
James Inform
James Lucas
Jan Mussler
Jaroslav Sivy
Jeevan Chalke
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jeremy Evans
Jeremy Schneider
Jeremy Smith
Jerry Sievers
Jesper Pedersen
Jesse Kinkead
Jesse Zhang
Jian Zhang
Jie Zhang
Jim Nasby
Jimmy Yih
Jobin Augustine
Joe Conway
John Hsu
John Naylor
Jon Jensen
Jonathan Katz
Jorge Gustavo Rocha
Josef Šimánek
Joseph Nahmias
Juan José Santamaría Flecha
Julian Backes
Julien Rouhaud
Jürgen Purtz
Justin King
Justin Pryzby
Karl O. Pinc
Keisuke Kuroda
Keith Fiske
Kelly Min
Ken Tanzer
Kirill Bychik
Kirk Jamison
Konstantin Knizhnik
Kuntal Ghosh
Kyle Kingsbury
Kyotaro Horiguchi
Lars Kanis
Laurenz Albe
Leif Gunnar Erlandsen
Li Japin
Liudmila Mantrova
Lucas Viecelli
Luis M. Carril
Lukáš Sobotka
Maciek Sakrejda
Magnus Hagander
Mahadevan Ramachandran
Mahendra Singh Thalor
Manuel Rigger
Marc Munro
Marcos David
Marina Polyakova
Mark Dilger
Mark Wong
Marko Tiikkaja
Markus Winand
Marti Raudsepp
Martijn van Oosterhout
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Mateusz Guzik
Matt Jibson
Matteo Beccati
Maxence Ahlouche
Melanie Plageman
Michael Banck
Michael Luo
Michael Meskes
Michael Paquier
Michail Nikolaev
Mike Palmiotto
Mithun Cy
Movead Li
Nathan Bossart
Nazli Ugur Koyluoglu
Neha Sharma
Nicola Contu
Nicolás Alvarez
Nikhil Sontakke
Nikita Glukhov
Nikolay Shaplov
Nino Floris
Noah Misch
Noriyoshi Shinoda
Oleg Bartunov
Oleg Samoilov
Oleksii Kliukin
Ondrej Jirman
Panagiotis Mavrogiorgos
Pascal Legrand
Patrick McHardy
Paul Guo
Paul Jungwirth
Paul Ramsey
Paul Sivash
Paul Spencer
Pavan Deolasee
Pavel Borisov
Pavel Luzanov
Pavel Stehule
Pavel Suderevsky
Peifeng Qiu
Pengzhou Tang
Peter Billen
Peter Eisentraut
Peter Geoghegan
Peter Smith
Petr Fedorov
Petr Jelínek
Phil Bayer
Philip Semanchuk
Philippe Beaudoin
Pierre Ducroquet
Pierre Giraud
Piotr Gabriel Kosinski
Piotr Wlodarczyk
Prabhat Sahu
Quan Zongliang
Quentin Rameau
Rafael Castro
Rafia Sabih
Raj Mohite
Rajkumar Raghuwanshi
Ramanarayana M
Ranier Vilela
Rares Salcudean
Raúl Marín Rodríguez
Raymond Martin
Reijo Suhonen
Richard Guo
Robert Ford
Robert Haas
Robert Kahlert
Robert Treat
Robin Abbi
Robins Tharakan
Roger Harkavy
Roman Peshkurov
Rui DeSousa
Rui Hai Jiang
Rushabh Lathia
Ryan Lambert
Ryohei Takahashi
Scott Ribe
Sean Farrell
Sehrope Sarkuni
Sergei Agalakov
Sergei Kornilov
Sergey Cherkashin
Shawn Debnath
Shawn Wang
Shay Rojansky
Shenhao Wang
Simon Riggs
Slawomir Chodnicki
Soumyadeep Chakraborty
Stéphane Lorek
Stephen Frost
Steve Rogerson
Steven Winfield
Surafel Temesgen
Suraj Kharage
Takanori Asaba
Takao Fujii
Takayuki Tsunakawa
Takuma Hoshiai
Tatsuhito Kasahara
Tatsuo Ishii
Tatsuro Yamada
Taylor Vesely
Teodor Sigaev
Tham Nguyen
Thibaut Madelaine
Thom Brown
Thomas Kellerer
Thomas Munro
Tiago Anastacio
Tim Clarke
Tim Möhlmann
Tom Ellis
Tom Gottfried
Tom Lane
Tomas Vondra
Tuomas Leikola
Tushar Ahuja
Victor Wagner
Victor Yegorov
Vignesh C
Vik Fearing
Vinay Banakar
Vladimir Leskov
Vladimir Sitnikov
Vyacheslav Makarov
Vyacheslav Shablistyy
Will Leinweber
William Crowell
Wyatt Alt
Yang Xiao
Yaroslav Schekin
Yi Huang
Yigong Hu
Yoann La Cancellera
Yoshikazu Imai
Yu Kimura
Yugo Nagata
Yuli Khodorkovskiy
Yusuke Egashira
Yuya Watari
Yuzuko Hosoya
ZhenHua Cai