E.9.发行 11

发布日期: 2018-10-18

E.9.1. Overview

PostgreSQL 11 中的主要增强功能包括:

  • 分区功能的改进,包括:

  • 添加对通过哈希键进行分区的支持

    • 添加对分区表上的PRIMARY KEYFOREIGN KEY,索引和触发器的支持

    • 允许创建“默认”分区来存储与其余分区都不匹配的数据

    • UPDATE更改分区键列的语句现在导致受影响的行移动到适当的分区

    • 在查询计划和执行过程中通过增强的分区消除策略提高SELECT性能

  • 对并行性的改进,包括:

  • CREATE INDEX现在可以在构建 B 树索引时使用并行处理

    • 现在可以在CREATE TABLE ... ASCREATE MATERIALIZED VIEW和使用UNION的某些查询中进行并行化

    • 并行散列连接和并行 Sequences 扫描现在表现更好

  • 支持嵌入式事务的 SQL 存储过程

  • 某些 SQL 代码的可选即时(JIT)编译,可加快表达式的求值速度

  • 窗口功能现在支持 SQL:2011 标准中显示的所有框架选项,包括RANGE distance PRECEDING/FOLLOWINGGROUPS模式和框架排除选项

  • 现在可以使用CREATE INDEXINCLUDE子句创建覆盖索引

  • 许多其他有用的性能改进,包括避免使用默认为非空列的ALTER TABLE ... ADD COLUMN重写表的功能

在以下各节中将更详细地说明上述各项。

E.9.2. 迁移到版本 11

那些希望从任何先前版本迁移数据的用户都需要使用pg_dumpallpg_upgrade或逻辑复制进行转储/还原。有关迁移到新的主要版本的一般信息,请参见Section 18.6

版本 11 包含许多更改,这些更改可能会影响与以前版本的兼容性。请注意以下不兼容性:

  • 使pg_dump转储数据库的属性,而不仅仅是其内容(Haribabu Kommi)

以前,数据库本身的属性(例如数据库级别的GRANT/REVOKE权限和ALTER DATABASE SET变量设置)仅由pg_dumpall转储。现在,pg_dump --createpg_restore --create除了数据库中的对象之外,还将还原这些数据库属性。 pg_dumpall -g现在仅转储与角色和表空间相关的属性。 pg_dumpall 的完整输出(不带-g)保持不变。

没有--create的 pg_dump 和 pg_restore 不再转储/恢复数据库级 Comments 和安全标签;这些现在被视为数据库的属性。

pg_dumpall 的输出脚本现在将始终使用原始语言环境和编码来创建数据库,因此,如果目标系统不知道该语言环境或编码名称,它将失败。以前,如果数据库的语言环境和编码与旧集群的默认值匹配,则将在没有这些规范的情况下发出CREATE DATABASE

pg_dumpall --clean现在恢复postgrestemplate1数据库以及用户创建的数据库的原始语言环境和编码设置。

  • 在对函数和列引用进行歧义消除时考虑语法形式(Tom Lane)

当* x *是表名或复合列时,PostgreSQL 传统上认为f(x)x.f的语法形式是等效的,从而允许诸如编写函数然后将其当作按需计算列的使用之类的技巧。但是,如果两种解释都可行,则始终选择列解释,如果用户打算使用函数解释,则会导致令人惊讶的结果。现在,如果存在歧义,则选择与句法形式匹配的解释。

  • 完全强制表和域约束名称的唯一性(Tom Lane)

PostgreSQL 期望表约束的名称是不同的,同样,对于域约束的名称也是如此。但是,对此并没有严格执行,并且以前在某些极端情况下可以创建重复的名称。

  • 根据 POSIX 标准(Tom Lane,Dang Minh Huong)使power(numeric, numeric)power(float8, float8)处理NaNImporting

POSIX 表示NaN ^ 0 = 11 ^ NaN = 1,但是所有其他具有NaNImporting 的情况都应返回NaN。在所有这些情况下,power(numeric, numeric)刚刚返回了NaN;现在,它尊重这两个 exception。如果 C 库这样做,则power(float8, float8)遵循标准;但是在某些旧的 Unix 平台上,该库没有,并且在某些版本的 Windows 上也存在问题。

  • 当模板分隔符不匹配时,防止to_number()使用字符(Oliver Ford)

具体来说,SELECT to_number('1234', '9,999')用于返回134。现在它将返回1234LTH现在仅使用非数字字符,正/负号,小数点或逗号。

  • 修复to_date()to_number()to_timestamp()以跳过每个模板字符的一个字符(Tom Lane)

以前,他们为模板字符的每个字节跳过一个* byte *,如果其中一个字符串包含多字节字符,则会导致奇怪的行为。

  • 调整to_char()to_number()to_timestamp()的模板字符串中双引号内的反斜杠的处理。

现在,这样的反斜杠会将字符后的字符转义,特别是双引号或其他反斜杠。

  • 正确处理xmltable()xpath()和其他 XML 处理函数(Markus Winand)中的相对路径表达式

根据 SQL 标准,相对路径从 XMLImporting 文档的文档节点开始,而不是从这些功能以前的根节点开始。

  • 扩展查询协议中,使statement_timeout分别应用于每个 Execute 消息,而不是应用于 Sync 之前的所有命令(Tatsuo Ishii,Andres Freund)

  • 从系统目录pg_class中删除relhaspkey列(Peter Eisentraut)

需要检查主键的应用程序应咨询pg_index

  • 将系统目录pg_procproisaggproiswindow列替换为prokind(Peter Eisentraut)

此新列更清楚地区分了函数,过程,聚合和窗口函数。

  • 更正信息架构列tables.table_type以返回FOREIGN而不是FOREIGN TABLE(Peter Eisentraut)

此新输出符合 SQL 标准。

  • 更改后台工作人员的 ps 进程显示标签以匹配pg_stat_activity.backend_type标签(Peter Eisentraut)

  • 导致在打开大对象lo_open()时发生大对象权限检查,而不是在尝试进行读取或写入时发生(Tom Lane,Michael Paquier)

如果请求写访问权限且该写访问权限不可用,那么即使从不写入大对象,现在也会引发错误。

  • 防止非超级用户重新索引共享目录(Michael Paquier,Robert Haas)

以前,还允许数据库所有者执行此操作,但是现在,数据库所有者被认为超出了他们的权限范围。

  • 删除不推荐使用的adminpack函数pg_file_read()pg_file_length()pg_logfile_rotate()(Stephen Frost)

核心后端现在具有等效功能。现有的adminpack安装将 continue 有权使用这些功能,直到通过ALTER EXTENSION ... UPDATE更新它们为止。

  • 荣誉大写双引号命令选项(Daniel Gustafsson)

以前,即使使用双引号 Importing,某些 SQL 命令中的选项名称也被强制小写。因此,例如"FillFactor"将被接受为索引存储选项,尽管其名称正确为小写。现在,此类情况将产生错误。

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

确定替换种类不再有用。

PostgreSQL 长期以来就为此功能支持更符合标准的语法。

  • 在 PL/pgSQL 触发函数中,未分配时,OLDNEW变量现在读为 NULL(Tom Lane)

以前,可以解析但不执行对这些变量的引用。

E.9.3. Changes

在下面,您将详细了解 PostgreSQL 11 和以前的主要发行版之间的更改。

E.9.3.1. Server

E.9.3.1.1. Partitioning
  • 允许基于哈希键列创建分区(Amul Sul)

  • 分区表上的支持索引(ÁlvaroHerrera,Amit Langote)

分区表上的“索引”不是整个分区表上的物理索引,而是用于在表的每个分区上自动创建相似索引的模板。

如果分区键是索引的列集的一部分,则可以将分区索引声明为UNIQUE。即使每个物理索引仅在其自己的分区中强制唯一性,它也将代表整个分区表的有效唯一性约束。

新命令更改索引附加分区使分区上的现有索引与其分区表的匹配索引模板相关联。这为设置现有分区表的新分区索引提供了灵 Active。

  • 允许分区表上的外键(ÁlvaroHerrera)

  • 在分区表上允许FOR EACH ROW触发器(ÁlvaroHerrera)

在分区表上创建触发器会自动在所有现有和将来的分区上创建触发器。这还允许在分区表上延迟唯一约束。

  • 允许分区表具有默认分区(Jeevan Ladhe,Beena Emerson,Ashutosh Bapat,Rahila Syed,Robert Haas)

默认分区将存储与任何其他已定义分区都不匹配的行,并进行相应搜索。

  • UPDATE更改分区键列的语句现在导致受影响的行被移动到适当的分区(Amit Khandekar)

  • 允许分区表上的INSERTUPDATECOPY正确地将行路由到外部分区(Etsuro Fujita,Amit Langote)

postgres_fdw外表支持此功能。由于为此调用ExecForeignInsert回调函数的方式与以前不同,因此必须修改外部数据包装程序以应对此更改。

  • 允许在查询处理期间更快地消除分区(Amit Langote,David Rowley,Dilip Kumar)

这样可以加快对具有多个分区的分区表的访问。

  • 允许在查询执行期间消除分区(David Rowley,Beena Emerson)

以前,分区消除仅在计划时发生,这意味着许多联接和准备好的查询无法使用分区消除。

  • 在分区表之间的相等联接中,允许将匹配的分区直接联接(Ashutosh Bapat)

默认情况下禁用此功能,但可以通过更改enable_partitionwise_join启用。

  • 允许针对每个分区分别评估分区表上的聚合函数,随后合并结果(Jeevan Chalke,Ashutosh Bapat,Robert Haas)

默认情况下禁用此功能,但可以通过更改enable_partitionwise_aggregate启用。

  • 允许postgres_fdw将聚合下推到作为分区的外部表中(Jeevan Chalke)
E.9.3.1.2. 并行查询
  • 允许并行构建 btree 索引(Peter Geoghegan,Rushabh Lathia,Heikki Linnakangas)

  • 允许使用共享哈希表并行执行哈希联接(Thomas Munro)

  • 如果无法并行处理SELECT,则允许UNION并行运行每个SELECT(Amit Khandekar,Robert Haas,Amul Sul)

  • 允许分区扫描以更有效地使用并行工作器(Amit Khandekar,Robert Haas,Amul Sul)

  • 允许LIMIT传递给并行工作者(Robert Haas,Tom Lane)

这使工作人员可以减少返回的结果并使用目标索引扫描。

  • 允许单次评估查询,例如WHERE子句汇总查询,并在目标列表中的功能进行并行化(Amit Kapila,Robert Haas)

  • 添加服务器参数parallel_leader_participation以控制领导者是否还执行子计划(Thomas Munro)

默认设置为启用,这意味着领导者将执行子计划。

  • 允许并行化命令CREATE TABLE ... ASSELECT INTOCREATE MATERIALIZED VIEW(Haribabu Kommi)

  • 与许多并行工作人员一起提高 Sequences 扫描的性能(David Rowley)

  • EXPLAIN中添加并行工作人员排序活动的报告(Robert Haas,Tom Lane)

E.9.3.1.3. Indexes
  • 允许 B 树索引包括不属于搜索关键字或唯一约束但可以通过仅索引扫描读取的列(Anastasia Lubennikova,Alexander Korotkov,Teodor Sigaev)

CREATE INDEX的新INCLUDE子句启用了此功能。它有助于构建优化特定查询类型的“覆盖索引”。即使列的数据类型不支持 B 树,也可以将其包括在内。

  • 改善单调增加索引添加的性能(Pavan Deolasee,Peter Geoghegan)

  • 提高哈希索引扫描的性能(Ashutosh Sharma)

  • 为哈希,GiST 和 GIN 索引添加谓词锁定(Shubham Barai)

这减少了可序列化模式事务中发生序列化冲突的可能性。

E.9.3.1.3.1. SP-Gist
  • 添加前缀匹配运算符text ^@ text,SP-GiST(Ildus Kurbangaliev)支持

这类似于将* var * LIKE 'word%'与 btree 索引一起使用,但是效率更高。

  • 允许使用 SP-GiST 索引多边形(Nikita Glukhov,Alexander Korotkov)

  • 允许 SP-GiST 使用叶密钥的有损表示(Teodor Sigaev,Heikki Linnakangas,Alexander Korotkov,Nikita Glukhov)

E.9.3.1.4. Optimizer
  • 改进对统计最常用值的选择(Jeff Janes,Dean Rasheed)

以前,根据最常见的值(MCV)与所有列值的比较来确定它们的频率。现在,根据与非 MCV 值相比的频率选择 MCV。这提高了均匀分布和非均匀分布的算法的鲁棒性。

  • 改善>=<=(汤姆巷)的选择性估计

以前,除非比较常数为 MCV,否则此类情况分别使用与><相同的选择性估计。对于涉及范围较小的BETWEEN的查询,此更改特别有用。

  • 将* var * = * var 减少到 var * IS NOT NULL(等效于汤姆巷)

这导致更好的选择性估计。

  • 改善EXISTSNOT EXISTS查询的优化程序的行数估计(Tom Lane)

  • 让优化器考虑评估成本和HAVING子句的选择性(Tom Lane)

E.9.3.1.5. 一般表现
  • 添加查询计划某些部分的Just-in-Time(JIT)编译以提高执行速度(Andres Freund)

此功能要求 LLVM 可用。当前默认情况下未启用它,即使在支持它的内部版本中也是如此。

  • 允许位图扫描在可能的情况下执行仅索引扫描(Alexander Kuzmenkov)

  • VACUUM(Claudio Freire)期间更新可用空间图

这样可以更快地重用可用空间。

  • 允许VACUUM避免不必要的索引扫描(泽田正彦,亚历山大·科罗特科夫)

  • 提高提交多个并发事务的性能(Amit Kapila)

  • 使用目标列表中的返回设置的函数来减少查询的内存使用量(Andres Freund)

  • 提高聚合计算的速度(Andres Freund)

  • 允许postgres_fdw使用到外部服务器的连接推送UPDATEDELETE(藤田悦郎)

以前,仅推入非联接的UPDATEDELETE

  • 在 Windows 上添加对“大页面”的支持(Takayuki Tsunakawa,Thomas Munro)

这由huge_pages配置参数控制。

E.9.3.1.6. Monitoring
  • log_statement_statslog_parser_statslog_planner_statslog_executor_stats的输出中显示内存使用情况(Justin Pryzby,Peter Eisentraut)

  • 添加第pg_stat_activity.backend_type列以显示后台工作人员的类型(Peter Eisentraut)

该类型在 ps 输出中也可见。

E.9.3.1.6.1. 信息架构
  • 添加与表约束和触发器相关的information_schema列(Peter Eisentraut)

具体来说,是triggersaction_ordertriggersaction_reference_old_tabletriggers。现在已填充action_reference_new_table,在此之前它们始终为 null。另外,table_constraintsenforced现在存在,但尚未填充。

E.9.3.1.7. Authentication
  • 允许服务器在搜索绑定模式下指定更复杂的LDAP规范(Thomas Munro)

具体来说,ldapsearchfilter允许使用 LDAP 属性的组合进行模式匹配。

  • 允许 LDAP 身份验证使用加密的 LDAP(Thomas Munro)

我们已经通过使用ldaptls=1支持 TLS 上的 LDAP。通过ldapscheme=ldapsldapurl=ldaps://启用了这种用于加密 LDAP 的新 TLS LDAP 方法。

  • 改善 LDAP 错误的记录(Thomas Munro)
E.9.3.1.8. Permissions

具体来说,新角色是:pg_read_server_filespg_write_server_filespg_execute_server_program。这些角色现在还控制谁可以使用服务器端COPYfile_fdwextensions。以前,只有超级用户可以使用这些功能,而这仍然是默认行为。

  • 允许对文件系统功能的访问由GRANT/REVOKE权限控制,而不是由超级用户检查(Stephen Frost)

具体来说,对以下功能进行了修改:pg_ls_dir()pg_read_file()pg_read_binary_file()pg_stat_file()

  • 使用GRANT/REVOKE来控制对lo_import()lo_export()的访问(Michael Paquier,Tom Lane)

以前,只授予超级用户访问这些功能的权限。

编译时选项ALLOW_DANGEROUS_LO_FUNCTIONS已被删除。

  • 禁止非密码访问postgres_fdw表时使用视图所有者而非会话所有者(Robert Haas)

PostgreSQL 仅允许超级用户访问postgres_fdw表而无需 Importing 密码,例如通过peer。以前,会话所有者必须是超级用户才能允许这种访问。现在,将改为检查视图所有者。

  • 修复了对视图SELECT FOR UPDATE中的无效锁定权限检查的权限(Tom Lane)
E.9.3.1.9. 服务器配置

还添加ssl_passphrase_command_supports_reload以指定是否应重新加载 SSL 配置,并在服务器配置重新加载期间调用ssl_passphrase_command

  • 添加存储参数toast_tuple_target以控制在考虑 TOAST 存储之前的最小 Tuples 长度(Simon Riggs)

默认的 TOAST 阈值尚未更改。

  • 允许以字节为单位指定与内存和文件大小相关的服务器选项(Beena Emerson)

新的单位后缀为“ B”。这是对现有单位“ kB”,“ MB”,“ GB”和“ TB”的补充。

E.9.3.1.10. 预写日志(WAL)
  • 允许在 initdb 期间设置 WAL 文件的大小(Beena Emerson)

以前,只能在编译时更改 16MB 的默认值。

  • 仅保留单个检查点的 WAL 数据(Simon Riggs)

以前,WAL 被保留了两个检查点。

  • 用零填充强制转换的 WAL 段文件的未使用部分,以提高可压缩性(Chapman Flack)

E.9.3.2. 基本备份和流复制

  • 使用逻辑复制时复制TRUNCATE活动(Simon Riggs,Marco Nenciarini,Peter Eisentraut)

  • 将准备好的 Transaction 信息传递给逻辑复制订户(Nikhil Sontakke,Stas Kelvich)

  • 从流式基础备份中排除未记录的表,临时表和pg_internal.init文件(David Steele)

无需复制此类文件。

  • 允许在流式基础备份期间验证堆页面的校验和(Michael Banck)

  • 允许通过编程方式高级复制插槽,而不是供订户使用(Petr Jelinek)

当不需要使用内容时,这可以使复制插槽有效地前进。这是由pg_replication_slot_advance()执行的。

  • 将时间轴信息添加到backup_label文件(Michael Paquier)

还要添加一个检查,以确保 WAL 时间线与backup_label文件的时间线匹配。

  • 将主机和端口连接信息添加到pg_stat_wal_receiver系统视图(Haribabu Kommi)

E.9.3.3. Util 命令

  • 允许ALTER TABLE以默认值添加非空列,而无需进行表重写(Andrew Dunstan,Serge Rielau)

当默认值为常数时启用。

  • 允许通过锁定基础表来锁定视图(Yugo Nagata)

  • 允许ALTER INDEX设置表达索引的统计信息收集目标(亚历山大·科罗特科夫,阿德里安·纳拉特)

在 psql 中,\d+现在显示索引的统计信息目标。

  • 允许在一个VACUUMANALYZE命令中指定多个表(Nathan Bossart)

另外,如果VACUUM中提到的任何表使用列列表,则必须提供ANALYZE关键字;以前,在这种情况下暗示ANALYZE

  • 将带括号的选项语法添加到ANALYZE(Nathan Bossart)

这类似于VACUUM支持的语法。

  • 添加CREATE AGGREGATE选项以指定聚合的终结函数的行为(Tom Lane)

这有助于优化用户定义的集合函数并将其用作窗口函数。

E.9.3.4. 资料类型

  • 允许创建域数组(Tom Lane)

这也允许在域上使用array_agg()

  • 支持复合类型的域(Tom Lane)

还允许 PL/Perl,PL/Python 和 PL/Tcl 处理复合域函数的参数和结果。还可以改善 PL/Python 域的处理。

  • JSONB标量的类型转换添加到数字和布尔数据类型(Anastasia Lubennikova)

E.9.3.5. Functions

  • 添加 SQL:2011 指定的所有window function框架选项(Oliver Ford,Tom Lane)

具体来说,允许RANGE模式使用PRECEDINGFOLLOWING选择分组值在正负指定偏移量之内的行。添加GROUPS模式以包括正负对等组数。帧排除语法也被添加。

  • 添加 SHA-2 系列哈希函数(Peter Eisentraut)

具体而言,添加了sha224()sha256()sha384()sha512()

  • 添加对 64 位非加密哈希函数的支持(Robert Haas,Amul Sul)

  • 允许to_char()to_timestamp()以小时和分钟为单位指定时区与 UTC 的时差(Nikita Glukhov,Andrew Dunstan)

这是通过格式规范TZHTZM完成的。

  • 添加文本搜索功能websearch_to_tsquery(),该功能支持与网络搜索引擎(Victor Drobny,Dmitry Ivanov)所使用的查询语法相似的查询语法

  • 添加函数json(b)_to_tsvector()以创建文本搜索查询以匹配JSON/JSONB值(Dmitry Dolgov)

E.9.3.6. 服务器端语言

  • 添加 SQL 级过程,可以启动和提交自己的事务(Peter Eisentraut)

它们使用新的CREATE PROCEDURE命令创建,并通过CALL调用。

新的ALTER/DROP ROUTINE命令允许更改/删除所有类似于例程的对象,包括过程,函数和集合。

另外,现在最好写FUNCTION而不是在CREATE OPERATORCREATE TRIGGER中写PROCEDURE,因为引用的对象必须是函数而不是过程。但是,出于兼容性考虑,仍接受旧语法。

  • 将事务控制添加到 PL/pgSQL,PL/Perl,PL/Python,PL/Tcl 和 SPI 服务器端语言(Peter Eisentraut)

事务控制仅在顶级事务级过程以及嵌套的DOCALL块(仅包含其他DOCALL块)内可用。

  • 添加将 PL/pgSQL 复合类型变量定义为非 null,常量或具有初始值的功能(Tom Lane)

  • 允许 PL/pgSQL 处理在同一会话(Tom Lane)中的第一个和以后的函数执行之间发生的对复合类型(例如记录,行)的更改

以前,这种情况会产生错误。

  • 添加 extensionsjsonb_plpython以将JSONB转换成 PL/Python 类型(或从 PL/Python 类型转换)(Anthony Bykov)

  • 添加 extensionsjsonb_plperl以将JSONB转换为 PL/Perl 类型(或从 PL/Perl 类型转换)(Anthony Bykov)

E.9.3.7. Client 端接口

  • 更改 libpq 以默认禁用压缩(Peter Eisentraut)

在现代 OpenSSL 版本中,压缩功能已被禁用,因此 libpq 设置对此类库无效。

  • DO CONTINUE选项添加到 ecpg 的WHENEVER语句(Vinayak Pokale)

这将生成 C continue语句,从而在指定条件发生时返回到所包含循环的顶部。

  • 添加 ecpg 模式以启用 Oracle Pro * C 风格的 char 数组处理。

通过-C启用此模式。

E.9.3.8. Client 应用

E.9.3.8.1. psql
  • 添加 psql 命令\gdesc以在查询结果中显示列的名称和类型(Pavel Stehule)

  • 添加 psql 变量以报告查询活动和错误(Fabien Coelho)

具体来说,新变量是ERRORSQLSTATEROW_COUNTLAST_ERROR_MESSAGELAST_ERROR_SQLSTATE

  • 允许 psql 测试变量是否存在(Fabien Coelho)

具体来说,语法:{?variable_name}允许在\if语句中测试变量的存在。

  • 允许环境变量PSQL_PAGER控制 psql 的寻呼机(Pavel Stehule)

这允许将 psql 的默认寻呼机指定为与其他应用程序的寻呼机不同的环境变量。如果未设置PSQL_PAGER,则PAGER仍会得到兑现。

  • 使 psql 的\d+命令始终显示表的分区信息(Amit Langote,Ashutosh Bapat)

以前,如果分区表没有分区,则不会显示分区信息。同时指出哪些分区本身已分区。

  • 提示 Importing 密码时,确保 psql 报告正确的用户名(Tom Lane)

以前,-U和嵌入 URI 的用户名的组合会导致错误的报告。当指定--password时,还要在密码提示前取消显示用户名。

  • 在没有事先 Importing 的情况下,允许quitexit退出 psql(Bruce Momjian)

还打印有关在 Importing 缓冲区不为空的情况下在一行上单独使用quitexit时如何退出的提示。为help添加类似的提示。

  • 当在一行中单独 Importing\q却被忽略时,使 psql 提示使用 control-D(Bruce Momjian)

例如,\q在以字符串形式提供时不会退出。

  • 改进ALTER INDEX RESET/SET(泽田雅彦)的制表符完成度

  • 添加基础结构以允许 psql 根据服务器版本(Tom Lane)调整其制表符完成查询

以前,选项卡补全查询可能会针对较旧的服务器失败。

E.9.3.8.2. pgbench
  • 添加对 NULL,布尔值以及某些函数和运算符的 pgbench 表达式支持(Fabien Coelho)

  • 向 pgbench 添加\if有条件的支持(Fabien Coelho)

  • 允许在 pgbench 变量名称中使用非 ASCII 字符(Fabien Coelho)

  • 添加 pgbench 选项--init-steps以控制执行的初始化步骤(泽田雅彦)

  • 将一个近似 Zipfian 分布的随机生成器添加到 pgbench(Alik Khilazhev)

  • 允许在 pgbench(Fabien Coelho)中设置随机种子

  • 允许 pgbench 与pow()power()求幂(RaúlMarínRodríguez)

  • 将哈希函数添加到 pgbench(Ildar Musin)

  • 使用--latency-limit--rate时,使 pgbench 统计信息更加准确(Fabien Coelho)

E.9.3.9. 服务器应用

  • pg_basebackup添加一个选项,以创建一个命名的复制槽(Michael Banck)

当使用 WAL 流方法(--wal-method=stream)时,选项--create-slot将创建命名的复制插槽(--slot)。

  • 允许initdb设置对数据目录的组读取访问权限(David Steele)

这是通过新的 initdb 选项--allow-group-access完成的。Management 员还可以在运行 initdb 之前在空数据目录上设置组权限。服务器变量data_directory_mode允许读取数据目录组权限。

  • 添加pg_verify_checksums工具以在脱机时验证数据库校验和(Magnus Hagander)

  • 允许pg_resetwal通过--wal-segsize(Nathan Bossart)更改 WAL 段的大小

  • 向 pg_resetwal 和 pg_controldata 添加长选项(Nathan Bossart,Peter Eisentraut)

  • 添加pg_receivewal选项--no-sync以防止 WAL 同步写入,以进行测试(Michael Paquier)

  • 添加 pg_receivewal 选项--endpos以指定何时应该停止接收 WAL(Michael Paquier)

  • 允许pg_ctlSIGKILLsignal 发送到进程(Andres Freund)

由于担心可能的滥用,以前不支持此功能。

  • 减少由pg_rewind复制的文件数(迈克尔·帕奎尔)

  • 阻止 pg_rewind 以root的身份运行(Michael Paquier)

E.9.3.9.1. pg_dump,pg_dumpall,pg_restore
  • 添加 pg_dumpall 选项--encoding以控制输出编码(Michael Paquier)

pg_dump 已经有了这个选项。

  • 添加 pg_dump 选项--load-via-partition-root强制将数据加载到分区的根表中,而不是原始分区中(Rushabh Lathia)

如果要加载的系统具有不同的排序规则定义或字节序,这可能很有用,这可能要求将行存储在与以前不同的分区中。

  • 添加一个选项以禁止转储和还原数据库对象 Comments(Robins Tharakan)

新的 pg_dump,pg_dumpall 和 pg_restore 选项为--no-comments

E.9.3.10. 源代码

  • 添加 PGXS 支持以安装包含文件(Andrew Gierth)

这支持创建依赖于其他模块的扩展模块。以前,从属模块没有简单的方法来找到所引用的包含文件。已对几个定义数据类型的现有contrib模块进行了调整,以安装相关文件。而且,PL/Perl 和 PL/Python 现在会安装其包含文件,以支持为这些语言创建转换模块。

  • 安装errcodes.txt以允许扩展访问 PostgreSQL 已知的错误代码列表(Thomas Munro)

  • 将文档转换为 DocBook XML(Peter Eisentraut,Alexander Lakhin,JürgenPurtz)

文件名仍使用sgmlextensions 以与后分支兼容。

  • 在最适合的平台上使用stdbool.h定义类型bool(Peter Eisentraut)

这消除了需要包含stdbool.h的扩展模块的编码风险。

  • 彻底检查定义初始系统目录内容的方式(John Naylor)

现在,初始数据以 Perl 数据结构表示,从而更容易进行机械操作。

  • 防止扩展程序创建采用值的引号列表的自定义服务器参数(Tom Lane)

目前尚不支持此功能,因为即使在加载扩展之前,也需要了解参数的属性。

  • 添加使用SCRAM身份验证时使用 Channels 绑定的功能(Michael Paquier)

通道绑定旨在防止中间人攻击,但是 SCRAM 无法阻止它们,除非可以强制将其激活。不幸的是,libpq 中没有办法做到这一点。期望在将来的 libpq 版本中以及未使用 libpq 构建的接口中支持该功能,例如 JDBC。

  • 允许后台工作人员连接到通常禁止连接的数据库(Magnus Hagander)

  • 添加对 ARMv8 上的硬件 CRC 计算的支持(Yuqi Gu,Heikki Linnakangas,Thomas Munro)

  • 通过 OID(Andres Freund)加快内置函数的查找

以前的二进制搜索已由查找数组代替。

  • 加快查询结果的构建(Andres Freund)

  • 提高访问系统缓存的速度(Andres Freund)

  • 添加世代内存分配器,该分配器针对串行分配/取消分配进行了优化(Tomas Vondra)

这减少了逻辑解码的内存使用量。

  • 进行pg_class的计算。 reltuplesVACUUM与其ANALYZE的计算相符(Tomas Vondra)

  • 更新以使用完美版本20170521(Tom Lane,Peter Eisentraut)

E.9.3.11. 附加模块

  • 允许 extensionspg_prewarm在启动时还原以前的共享缓冲区内容(Mithun Cy,Robert Haas)

这是通过在服务器运行期间和关闭时使pg_prewarm偶尔将共享缓冲区的关系和块号数据存储到磁盘来实现的。

  • 添加pg_trgm函数strict_word_similarity()以计算整个单词的相似度(Alexander Korotkov)

为此,已经存在函数word_similarity(),但是它被设计用来查找单词的相似部分,而strict_word_similarity()则计算与整个单词的相似度。

  • 允许btree_gin索引boolbpcharnameuuid数据类型(Matheus Oliveira)

  • 允许cubesegextensions 使用 GiST 索引执行仅索引扫描(Andrey Borodin)

  • 允许使用~>运算符检索负立方坐标(亚历山大·科罗特科夫)

在按降序查找坐标时,这对于 KNN-GiST 搜索很有用。

  • 将越南 Literals 处理添加到unaccentextensions(Dang Minh Huong,Michael Paquier)

  • 增强amcheck以检查每个堆 Tuples 是否具有索引条目(Peter Geoghegan)

  • adminpack使用新的默认文件系统访问角色(Stephen Frost)

以前,只有超级用户才能调用adminpack函数;现在检查角色权限。

  • pg_stat_statement的查询 ID 扩展为 64 位(Robert Haas)

这大大减少了查询 ID 哈希冲突的机会。现在,查询 ID 可能会显示为负值。

  • 删除contrib/start-scripts/osx个脚本,因为不再推荐使用它们(改为使用contrib/start-scripts/macos)(Tom Lane)

  • 删除chkpassextensions(Peter Eisentraut)

此扩展不再被视为可用的安全工具或如何编写扩展的示例。

E.9.4. Acknowledgments

以下个人(按字母 Sequences)以补丁作者,提交者,审阅者,测试者或问题的报告者的身份对该发行版做出了贡献。

Abhijit Menon-Sen
Adam Bielanski
Adam Brightwell
Adam Brusselback
Aditya Toshniwal
Adrián Escoms
Adrien Nayrat
Akos Vandra
Aleksander Alekseev
Aleksandr Parfenov
Alexander Korotkov
Alexander Kukushkin
Alexander Kuzmenkov
Alexander Lakhin
Alexandre Garcia
Alexey Bashtanov
Alexey Chernyshov
Alexey Kryuchkov
Alik Khilazhev
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
安德里亚斯·约瑟夫·克罗格
Andreas Karlsson
Andreas Seltenreich
André Hänsel
Andrei Gorita
Andres Freund
Andrew Dunstan
Andrew Fletcher
Andrew Gierth
Andrew Grossman
Andrew Krasichkov
Andrey Borodin
Andrey Lizenko
Andy Abelisto
Anthony Bykov
Antoine Scemama
Anton Dignös
Antonin Houska
Arseniy Sharoglazov
Arseny Sher
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Ashwin Agrawal
Asim Praveen
Atsushi Torikoshi
Badrul Chowdhury
Balazs Szilfai
Basil Bourque
Beena Emerson
Ben Chobot
Benjamin Coutu
Bernd Helmle
Blaz Merela
Brad DeJong
Brent Dearth
Brian Cloutier
Bruce Momjian
Catalin Iacob
Chad Trabant
Chapman Flack
Christian Duta
Christian Ullrich
Christoph Berg
Christoph Dreis
Christophe Courtois
Christopher Jones
Claudio Freire
Clayton Salem
Craig Ringer
达格芬·伊尔马里·曼斯柯
Dan Vianello
Dan Watson
邓敏香
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Daniel Wood
Darafei Praliaskouski
Dave Cramer
Dave Page
David Binderman
David Carlier
David Fetter
戴维·约翰斯顿
David Gould
David Hinkle
大卫·佩雷罗·拉加雷斯(David Pereiro Lagares)
David Rader
David Rowley
David Steele
Davy Machado
Dean Rasheed
Dian Fay
Dilip Kumar
Dmitriy Sarafannikov
Dmitry Dolgov
Dmitry Ivanov
Dmitry Shalashov
Don Seiler
Doug Doole
Doug Rady
Edmund Horner
Eiji Seki
Elvis Pranskevichus
Emre Hasegeli
Erik Rijkers
Erwin Brandstetter
Etsuro Fujita
Euler Taveira
Everaldo Canuto
Fabien Coelho
法布里齐奥·德·罗耶斯·梅洛
Feike Steenbergen
Frits Jalvingh
Fujii Masao
Gao Zengqi
Gianni Ciolli
Greg Stark
Gunnlaugur 托尔·布里姆
郭湘潭
Hadi Moshayedi
Hailong Li
Haribabu Kommi
Heath Lord
Heikki Linnakangas
Hugo Mercier
Igor Korot
Igor Neyman
Ildar Musin
Ildus Kurbangaliev
Ioseph Kim
Jacob Champion
Jaime Casanova
Jakob Egger
Jean-Pierre Pelletier
Jeevan Chalke
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jeremy Evans
Jeremy Finzel
Jeremy Schneider
Jesper Pedersen
Jim Nasby
Jimmy Yih
Jing Wang
Jobin Augustine
Joe Conway
John Gorman
John Naylor
Jon Nelson
Jon Wolski
Jonathan Allen
乔纳森·卡兹
Julien Rouhaud
Jürgen Purtz
Justin Pryzby
KaiGai Kohei
Kaiting Chen
Karl Lehenbauer
Keith Fiske
Kevin Bloch
Kha Nguyen
金·罗斯·卡尔森
Konstantin Knizhnik
Kuntal Ghosh
Kyle Samson
Kyotaro Horiguchi
Lætitia Avrot
Lars Kanis
Laurenz Albe
Leonardo Cecchi
Liudmila Mantrova
Lixian Zou
Lloyd Albin
Luca Ferrari
Lucas Fairchild
Lukas Eder
Lukas Fittl
Magnus Hagander
Mai Peng
Maksim Milyutin
Maksym Boguk
Mansur Galiev
Marc Dilger
Marco Nenciarini
Marina Polyakova
马里奥·德·弗鲁托斯·迪格斯
Mark Cave-Ayland
Mark Dilger
Mark Wood
Marko Tiikkaja
Markus Winand
Martín Marqués
Masahiko Sawada
Matheus Oliveira
Matthew Stickney
Metin Doslu
Michael Banck
Michael Meskes
Michael Paquier
Michail Nikolaev
Mike Blackwell
Minh-Quan Tran
Mithun Cy
Morgan Owens
Nathan Bossart
Nathan Wagner
Neil Conway
Nick Barnes
Nicolas Thauvin
Nikhil Sontakke
Nikita Glukhov
Nikolay Shaplov
Noah Misch
Noriyoshi Shinoda
Oleg Bartunov
Oleg Samoilov
Oliver Ford
Pan Bian
Pascal Legrand
Patrick Hemmer
Patrick Krecker
Paul Bonaud
Paul Guo
Paul Ramsey
Pavan Deolasee
Pavan Maddamsetti
Pavel Golub
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Petr Jelínek
Petru-Florin Mihancea
Phil Florent
Philippe Beaudoin
Pierre Ducroquet
Piotr Stefaniak
Prabhat Sahu
Pu Qun
QL Zhuo
Rafia Sabih
Rahila Syed
Rainer Orth
Rajkumar Raghuwanshi
劳尔·马林·罗德里格斯(RaúlMarínRodríguez)
Regina Obe
Richard Yen
Robert Haas
Robins Tharakan
Rod Taylor
Rushabh Lathia
Ryan Murphy
Sahap Asci
Samuel Horwitz
Scott Ure
Sean Johnston
Shao Bret
Shay Rojansky
Shubham Barai
Simon Riggs
Simone Gotti
Sivasubramanian Ramasubramanian
Stas Kelvich
Stefan Kaltenbrunner
Stephen Froehlich
Stephen Frost
Steve Singer
Steven Winfield
Sven Kunze
Taiki Kondo
Takayuki Tsunakawa
Takeshi Ideriha
Tatsuo Ishii
Tatsuro Yamada
Teodor Sigaev
Thom Brown
Thomas Kellerer
Thomas Munro
Thomas Reiss
Tobias Bussmann
托德·库克
Tom Kazimiers
Tom Lane
Tomas Vondra
Tomonari Katsumata
Torsten Grust
Tushar Ahuja
Vaishnavi Prabakaran
Vasundhar Boddapati
Victor Drobny
Victor Wagner
Victor Yegorov
Vik Fearing
Vinayak Pokale
Vincent Lachenal
Vitaliy Garnashevich
Vitaly Burovoy
Vladimir Baranoff
Xin Zhang
黄奕文
Yorick Peterse
Yugo Nagata
Yuqi Gu
Yura Sokolov
Yves Goergen
Zhou Digoal