阅读(305) (0)

PostgreSQL 发布版本 13

2021-08-24 15:07:44 更新
E.2.1. 概览
E.2.2. 迁移到第13版
E.2.3. 变化情况
E.2.4. 致谢

发布日期: 2020-09-24

E.2.1. 概览

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

  • 从B树索引条目的去重中节省空间和提高性能

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

  • 在使用扩展统计时,更好地进行查询计划

  • 索引的并行vacuum回收

  • 增量排序

上述项目和PostgreSQL13的其他新功能将在以下章节中详细解释。

E.2.2. 迁移到第13版

对于那些希望从任何以前的版本迁移数据的人来说,需要使用pg_dumpall进行转储/恢复,或者使用pg_upgrade或逻辑复制。 关于迁移到新的主要版本的一般信息,请参见第 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并希望看到辅助进程的查询将需要使用左键连接。

  • 重新命名各种wait events以提高一致性。 (Fujii Masao, Tom Lane)

  • 修复ALTER FOREIGN TABLE ... 重命名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。它是以兆字节为单位的,而不是像以前的参数那样以文件数为单位。如果你以前使用wal_keep_segments,下面的公式会给你一个近似的设置:

    wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
    

  • 移除对使用PostgreSQL8.0以前的语法定义operator class的支持。(Daniel Gustafsson)

  • 移除对定义foreign key constraints的支持,使用PostgreSQL 7.3以前的语法。 (Daniel Gustafsson)

  • 移除对 "不透明"伪类型的支持,这些伪类型是由PostgreSQL7.3以前的服务器使用的。 (Daniel Gustafsson)

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

    CREATE EXTENSIONFROM选项已不再被支持。 任何仍然使用未打包的扩展的安装,在更新到PostgreSQL13之前,应该将它们升级到打包的版本。

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

    IANA的时区组已经废弃了这个功能,这意味着它将在未来几年逐渐从系统的时区数据库中消失。 为了避免在时区数据更新时出现意外的行为变化,我们已经从第13版开始删除了PostgreSQL对该功能的支持。 这只影响POSIX风格的时区规范的行为,这些规范缺乏明确的夏令时过渡规则;以前,过渡规则可以通过安装一个自定义的 posixrules文件来确定,但现在它是硬连接的。 对于任何受影响的安装,建议的修复方法是开始使用一个地理时区名称。

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

  • 修正pageinspectbt_metap(),以返回更合适的数据类型,减少溢出的可能性。 (Peter Geoghegan)

E.2.3. 变化情况

下面你将看到PostgreSQL13和前一个主要版本之间的变化的详细说明。

E.2.3.1. 服务器

E.2.3.1.1. 分区
  • 允许pruning分区在更多情况下发生。 (Yuzuko Hosoya, Amit Langote, Álvaro Herrera)

  • 允许partitionwise joins在更多情况下发生。 (Ashutosh Bapat, Etsuro Fujita, Amit Langote, Tom Lane)

    例如,分区连接现在可以在分区表之间发生,即使它们的分区边界不完全匹配。

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

    但是,这样的触发器不允许改变数据写入的目的分区。

  • 允许分区表通过publications进行逻辑复制。(Amit Langote)

    以前,分区必须被单独复制。 现在,可以显式地发布一个分区表,使其所有的分区都自动发布。 添加/删除一个分区会导致它同样被添加到或从发布中删除。 CREATE PUBLICATION选项publish_via_partition_root控制是否对分区的修改还是作为它们父级的修改发布。

  • 允许逻辑复制到订阅者的分区表内 (Amit Langote)

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

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

E.2.3.1.2. 索引
  • 更有效地在B树索引中存储重复数据。 (Anastasia Lubennikova, Peter Geoghegan)

    这允许对低基数的列进行有效的B-tree索引,只存储一次重复的键。 使用 pg_upgrade 升级的用户将需要使用REINDEX来让已有的索引使用这个功能。

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

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

  • 允许索引操作者类传参 (Nikita Glukhov)

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

    在四字节和八字节的integer arraytsvectorpg_trgmltreehstore列上创建的索引现在可以控制这些GiST索引参数,而不是使用默认值。

  • 防止使用非默认排序的索引被添加作为表的唯一或主键约束。 (Tom Lane)

    索引的字符集或者排序规则必须与底层列的相匹配,但是ALTER TABLE以前没有检查这一点。

E.2.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.2.3.1.4. 总体性能
  • 实现 增量排序 (James Coleman, Alexander Korotkov, Tomas Vondra)

    如果已知一个中间查询结果是由一个或多个所需排序的前导键排序的,那么如果行被分批排序,且前导键相等,则可以只考虑其余的键进行额外的排序。

    如果需要,可以用enable_incremental_sort来控制。

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

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

    以前,如果预计hash聚合会使用超过work_mem的内存,就会避免进行hash聚合。 现在,尽管如此,也可以选择一个哈希聚合计划。 如果哈希表超过work_mem几倍hash_mem_multiplier,就会溢出到磁盘。

    这种行为通常比旧的行为要好,在旧的行为中,一旦选择了哈希聚合,无论它有多大,哈希表都会被保存在内存中 — 如果计划器被错误地估计了,它可能会非常大。 如果需要,可以通过增加hash_mem_multiplier来获得类似的行为。

  • 允许在autovacuum中插入,而不仅仅是更新和删除,以触发autovacuum清理行为。 (Laurenz Albe, Darafei Praliaskouski)

    以前,仅插入数据会触发自动分析,但不会触发autovacuum自动清理,理由是不可能有任何被标记删除的行需要删除。 然而,vacuum扫描还有其他有用的副作用,比如设置页面全部可见的位,这提高了index-only扫描的效率。 另外,允许只插入表接受周期性的vacuum扫描有助于分散freezing旧元组的工作,这样,当整个表一下子达到反包围阈值时,就不会突然有大量的冻结工作要做。

    如果有必要,可以用新的参数autovacuum_vacuum_insert_thresholdautovacuum_vacuum_insert_scale_factor来调整这种行为,或者用相应的表格存储选项。

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

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

    大于wal_skip_threshold的表,其文件将被sync而不是生成WAL。 以前,这只对COPY操作进行,但该实现有一个错误,在崩溃恢复期间可能导致数据丢失。

  • 当许多表空间被使用时,重放DROP DATABASE命令时,改善性能。 (Fujii Masao)

  • 提高大表truncation的性能。(Kirk Jamison)

  • 改进对TOAST的前导字节的检索。 (Binguo Bao, Andrey Borodin)

    以前,压缩的行外TOAST值被完全fetch,即使已知只需要一些前导字节。现在 , 仅fetch产生结果的数据就好.

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

  • 加快整数与文本的转换速度 (David Fetter)

  • 减少包含许多SQL语句的查询字符串和扩展脚本的内存使用。 (Amit Langote)

E.2.3.1.5. 监控
  • 允许EXPLAINauto_explainautovacuumpg_stat_statements追踪WAL使用统计信息 (Kirill Bychik, Julien Rouhaud)

  • 允许记录SQL语句的样本,而不是所有的语句 (Adrien Nayrat)

    log_statement_sample_rate这些语句中的一部分将被记录。 那些花费超过log_min_duration_sample时间的语句将被记录下来。

  • csvlog和可选的log_line_prefix日志输出中添加后端类型。(Peter Eisentraut)

  • 改进对预编译的语句参数记录日志的控制 (Alexey Bashtanov, Álvaro Herrera)

    GUC设置log_parameter_max_length控制在记录非错误语句时输出的参数值的最大长度,而log_parameter_max_length_on_error对记录有错误的语句做同样处理。 以前,预编译的语句参数在出错时不会被记录。

  • 允许在出错后记录函数调用的回溯信息 (Peter Eisentraut, Álvaro Herrera)

    新的参数backtrace_functions指定了哪些C函数应该在出错时生成回溯记录。

  • vacuum缓冲区计数器的宽度为64位,以避免溢出。 (Álvaro Herrera)

E.2.3.1.6. 系统视图
E.2.3.1.7. 等待事件
  • 在用posix_fallocate()创建DSM段时报告一个等待事件。 (Thomas Munro)

  • 添加等待事件VacuumDelay以报告基于成本的vacuum延迟 (Justin Pryzby)

  • WAL存档和恢复暂停添加等待事件 (Fujii Masao)

    新事件是BackupWaitWalArchive和RecoveryPause。

  • 添加等待事件RecoveryConflictSnapshot和RecoveryConflictTablespace来监控恢复冲突 (Masahiko Sawada)

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

E.2.3.1.8. 身份认证
  • 只允许超级用户查看ssl_passphrase_command设置。 (Insung Moon)

    作为一项安全预防措施,这一点被改变了。

  • 将服务器默认的用于加密连接的最小TLS版本从1.0改为1.2。 (Peter Eisentraut)

    这个选择可以由ssl_min_protocol_version控制。

E.2.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-domain sockets的支持。 (Peter Eisentraut)

E.2.3.2. 流式复制和恢复

  • 允许通过重新加载来改变流式复制的配置设置 (Sergei Kornilov)

    以前,要改变primary_conninfoprimary_slot_name,需要重新启动服务器。

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

    这种行为可以用wal_receiver_create_temp_slot启用。

  • 允许复制槽的WAL存储受到max_slot_wal_keep_size的限制。(Kyotaro Horiguchi)

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

  • 允许standby promotion取消任何要求的暂停。 (Fujii Masao)

    以前,当备用机处于暂停状态时,不能进行promotion。

  • 如果恢复没有达到指定的恢复目标,则生成一个错误。 (Leif Gunnar Erlandsen, Peter Eisentraut)

    以前,在达到WAL的末尾时,即使没有达到目标,备机也会自我promote。

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

    这是由 logical_decoding_work_mem 参数控制。

  • 即使无效的页面被WAL引用,也允许继续恢复。 (Fujii Masao)

    这是用ignore_invalid_pages启用的。

E.2.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命令中的bug (Tom Lane)

    IF NOT EXISTS子句现在可以按预期运行,即如果列已经存在,派生动作(如索引创建)就不会执行。 另外,在某些情况下,将相关操作合并到一个ALTER TABLE中,现在有效,而以前却不能。

  • 增加ALTER VIEW语法来重命名视图列 (Fujii Masao)

    重命名视图列已经是可能的,但人们必须写ALTER TABLE RENAME COLUMN,这是令人困惑的。

  • 增加ALTER TYPE选项,以修改一个基本类型的TOAST属性和支持功能。 (Tomas Vondra, Tom Lane)

  • 添加CREATE DATABASE LOCALE 选项 (Peter Eisentraut)

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

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

    这是由FORCE选项启用的。

  • 添加结构成员tg_updatedcols以允许C语言更新触发器知道哪一列被更新。 (Peter Eisentraut)

E.2.3.4. 数据类型

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

    新的数据类型是anycompatibleanycompatiblearrayanycompatiblenonarrayanycompatiblerange

  • 添加SQL数据类型xid8以揭示完整的事务idFullTransactionId。 (Thomas Munro)

    现有的xid数据类型只有4个字节,所以它不提供事务年代。

  • 增加数据类型regcollation和相关函数,以表示校对(字符集)对象的OIDs。 (Julien Rouhaud)

  • 在某些情况下使用glibc版本作为collation版本标识。(Thomas Munro)

    如果glibc版本发生变化,将发出关于可能损坏依赖字符集的索引的警告。

  • 增加对Windows上的字符集版本的支持 (Thomas Munro)

  • 允许ROW表达式用后缀符号提取其成员 (Tom Lane)

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

E.2.3.5. Functions

  • 增加jsonb_set()的替代版本,改进了NULL的处理。 (Andrew Dunstan)

    新的函数,jsonb_set_lax(),处理一个NULL的新值,方法是将指定的键设置为JSON空,删除键,引发异常,或者根据要求返回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()使用。

  • 添加SSSS日期格式模式作为SQL标准的SS的别名。 (Nikita Glukhov, Alexander Korotkov)

  • 添加函数gen_random_uuid()以生成第4版UUIDs (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也可以。

  • 创建所有transaction ID函数的xid8版本。 (Thomas Munro)

    旧的基于xid的函数仍然存在,以便向后兼容。

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

  • 允许advisory-lock函数在某些并行操作中使用 (Tom Lane)

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

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

E.2.3.6. PL/pgSQL

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

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

E.2.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.2.3.8. 客户端应用

E.2.3.8.1. psql
  • psql的默认prompts中添加事务状态(%x)。(Vik Fearing)

  • 允许次要的psql提示是空白的,但与主要提示的宽度相同。 (Thomas Munro)

    这是通过设置PROMPT2%w来实现的。

  • 允许psqlg\gx命令在该单一命令期间改变>pset输出选项。(Tom Lane)

    这个功能允许像g(expand=on)这样的语法,这相当于\gx

  • 添加psql命令以显示运算符类和运算符系列 (Sergey Cherkashin, Nikita Glukhov, Alexander Korotkov)

    新的命令是 \dAc, \dAf, \dAo, 和 \dAp.

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

    在verbose模式下,表/索引/视图显示该对象是永久的、临时的还是未记录的。

  • 改进psqldTOAST表的输出。 (Justin Pryzby)

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

    当退出编辑器时,如果查询没有以分号或\g结束,现在将显示查询缓冲区的内容。

  • psql中添加\warn命令 (David Fetter)

    这就像echo,只是文本被发送到stderr而不是stdout。

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

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

    这允许对分区进行性能测试。

  • 添加pgbench命令/aset,其行为类似于/gset,但用于多个查询。 (Fabien Coelho)

  • 允许pgbench在服务器端生成其初始数据,而不是在客户端。 (Fabien Coelho)

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

E.2.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在rewinding前自动运行崩溃恢复。 (Paul Guo, Jimmy Yih, Ashwin Agrawal)

    这可以通过使用--no-ensure-shutdown来禁用。

  • 增加PREPARE TRANSACTION相关信息,由pg_waldump报告。 (Fujii Masao)

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

  • 添加pg_dump选项--include-foreign-data 来转储外部服务器的数据。 (Luis Carril)

  • 允许由vacuumdb运行的vacuum命令以并行模式运行 (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.2.3.10. 文档

  • 在文档中增加一个glossary。 (Corey Huinker, Jürgen Purtz, Roger Harkavy, Álvaro Herrera)

  • 重新格式化包含函数和操作符信息的表格,使之更加清晰。(Tom Lane)

  • 升级到使用DocBook 4.5。 (Peter Eisentraut)

E.2.3.11. 源代码

  • 增加对Visual Studio 2019上构建的支持 (Haribabu Kommi)

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

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

  • 更新Snowball stemmer全文搜索使用的词典 (Panagiotis Mavrogiorgos)

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

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

  • 移除对非ELF BSD系统的支持。 (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函数兼容,需要这些函数,但这些函数已不再被支持。

  • 将查询字符串传递给计划器Hook函数 (Pascal Legrand, Julien Rouhaud)

  • 添加TRUNCATE命令挂钩 (Yuli Khodorkovskiy)

  • 添加TLS初始hook (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.2.3.12. 其他模块

  • 允许extensions被指定为可信的。 (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增加一个选项,以忽略整数的signv。 (Jeff Janes)

  • 添加adminpack函数pg_file_sync()以允许fsync'ing一个文件 (Fujii Masao)

  • 添加pageinspect函数来输出t_infomask/t_infomask2值为人性化可读格式(Craig Ringer, Sawada Masahiko, Michael Paquier)

  • 在pageinspect输出中添加B树索引去重处理列 (Peter Geoghegan)

E.2.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