9.3 9.4 9.5 9.6 10 11 12 13 14
阿里云PostgreSQL 问题报告 纠错本页面

E.3. 版本11

E.3.1. 概述
E.3.2. 迁移到版本11
E.3.3. 修改列表
E.3.4. 致谢

发布日期: 2018-10-18

E.3.1. 概述

PostgreSQL11的主要改进有:

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

    • 增加用哈希键分区的支持

    • 增加分区表上PRIMARY KEY, FOREIGN KEY,索引和触发器的支持

    • 允许创建default分区,以存储与其余分区都不匹配的数据

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

    • 在查询计划和执行时通过增强分区排除策略来提高SELECT性能

  • 并行性改进,包括:

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

    • 现在CREATE TABLE ... AS,CREATE MATERIALIZED VIEW和某些使用UNION的查询中并行是可能的

    • 并行化的哈希连接和并行化顺序扫描现在表现更好

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

  • 对于一些SQL代码,可用即时(JIT)编译加速表达式评估

  • 窗口函数现在支持SQL:2011标准中的所有帧选项,包括RANGE distance PRECEDING/FOLLOWING, GROUPS模式和帧排除选项

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

  • 其它很多有用的性能改进,包括在ALTER TABLE ... ADD COLUMN以非空列作为缺省时避免对表重写的能力

以上的项在下面的章节中详细说明。

E.3.2. 迁移到版本11

要从任何以前的版本迁移数据,需要使用pg_dumpall或使用pg_upgrade来转储/恢复。

版本11包含一些影响到与以前的版本的兼容性的修改。注意以下不兼容的方面:

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

    以前,数据库本身的属性,例如数据库级的GRANT/REVOKE权限和ALTER DATABASE SET变量设置,仅由pg_dumpall来转储。现在pg_dump --createpg_restore --create将恢复数据库中的属性和对象。pg_dumpall -g现在仅转储角色和表空间相关属性。pg_dumpall的全部输出(无-g)未改变。

    pg_dumppg_restore,没有--create选项时,不在转储/恢复数据库级注释和安全标记,这些内容现在被当作数据库属性。

    pg_dumpall的输出脚本现在创建数据库时总与其原来的区域设置和编码一起,所以如果目的系统的区域设置和编码名称未知的话,就会失败。以前,如果数据库的区域设置和编码与旧集群的缺省设置匹配的话,则CREATE DATABASE命令无此要求即被发出。

    pg_dumpall --clean现在可恢复postgrestemplate1数据库原来的区域设置和编码设置,这与用户创建的数据库是一样的。

  • 消除函数与列引用的歧义时考虑句法形式 (Tom Lane)

    x是表名或复合列时,PostgreSQL通常认为f(x)x.f的句法形式是等价的。这就允许类似于写一个函数,然后使用时它象是一按需计算的列这样的小把戏。但是,如果两种解释都可行,一般总选择列解释,就会导致用户需要函数解释时出现奇怪的结果。现在,如果有歧义,将选择匹配句法形式的解释。

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

    PostgreSQL要求表名不同,约束名也不同。但是,对此没有严格的强制措施,以前出现过相同名可以创建的特殊案例。

  • 使power(numeric, numeric)power(float8, float8)按POSIX标准处理NaN输入 (Tom Lane, Dang Minh Huong)

    POSIX要求NaN ^ 0 = 11 ^ NaN = 1,所有其他有NaN输入的情况都应返回NaN。在这些所有的情况下,power(numeric, numeric)正好返回NaN;现在接受两种异常。power(float8, float8)遵循标准只要C库支持;但在一些老的Unix平台上C库并未遵循标准,在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标准,相对路径是从XML输入文档的文档节点开始,而不是这些函数以前所用的根节点。

  • 扩展查询协议中,使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安装可继续访问这些函数,直到用ALTER EXTENSION ... UPDATE更新为止。

  • 遵守双引号命令选项的大写(规则)(Daniel Gustafsson)

    以前,特定SQL命令中的选型名称是强制小写,即使有双引号;比如"FillFactor"将接受为索引存储选项,尽管其名字应为小写。这种情况现在会产生错误。

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

    经确认,不再使用替换排序。

  • 移除CREATE FUNCTION中的WITH子句 (Michael Paquier)

    关于这种功能的一种更符合标准的语法,PostgreSQL已支持了很久。

  • PL/pgSQL触发器函数中,没有赋值时,变量OLDNEW现在读出来是NULL (Tom Lane)

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

E.3.3. 修改列表

下面是PostgreSQL11和以前主版本间的变更的详细说明。

E.3.3.1. 服务器

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

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

    分区表上的“索引”不是一种跨整个分区表的物理索引,而是一种自动创建表的每个分区上类似索引的模板。

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

    新命令ALTER INDEX ATTACH PARTITION使得分区表分区上已有索引与相配的索引模板关联。这样为已存在的分区表设置新的分区索引提供了灵活性。

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

  • 允许分区表上的FOR EACH ROW触发器 (Álvaro Herrera)

    创建分区表上的触发器,会自动创建所有已存在的和未来的分区上的触发器。这也允许分区表上可延迟的唯一约束。

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

    缺省分区将存储与任何其他已定义分区不匹配的行,作相应的搜索。

  • 改变分区键列的UPDATE语句现在会使得受影响的行移动到适当的分区 (Amit Khandekar)

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

    该功能由postgres_fdw外部表支持。

  • 允许查询处理时更快的分区排除 (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.3.3.1.2. 并行查询
  • 允许并行构建btree索引 (Peter Geoghegan, Rushabh Lathia, Heikki Linnakangas)

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

  • 允许UNION并行运行每个SELECT,如果单个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 ... AS, SELECT INTOCREATE MATERIALIZED VIEW并行化 (Haribabu Kommi)

  • 改进有许多并行工作者时顺序扫描的性能 (David Rowley)

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

E.3.3.1.3. 索引
  • 允许B-树索引包含不是搜索键或唯一约束的,但可用于仅索引扫描读的列 (Anastasia Lubennikova, Alexander Korotkov, Teodor Sigaev)

    该功能可用CREATE INDEX的新的INCLUDE子句来启用。它利用构造“覆盖索引”来优化特定类型的查询。可包含一些列,即使其数据类型B-树不支持。

  • 改进索引不断增长时的性能 (Pavan Deolasee, Peter Geoghegan)

  • 改进哈希索引扫描的性能 (Ashutosh Sharma)

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

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

E.3.3.1.3.1. SP-Gist
  • 增加前缀匹配操作符text ^@ text,由SP-GiST支持此项功能 (Ildus Kurbangaliev)

    这类似于btree索引时使用var LIKE 'word%',但它更有效。

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

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

E.3.3.1.4. 优化器
  • 改进统计信息最频值的选择 (Jeff Janes, Dean Rasheed)

    以前,最频值(MCV)的标识是基于他们与所有列值比较的频度。现在MCV的选择是基于他们与非MCV值比较的频度。这样就改进了均匀和不均匀分布下的算法的健壮性。

  • 改进>=<=的选择性评估 (Tom Lane)

    以前,此类案例如><分别使用同样的选择性评估,除非比较常数是MCV。该变化对使用BETWEEN在小区间查询特别有用。

  • 在等效的地方将var =var简化为var IS NOT NULL (Tom Lane)

    这会带来更好的选择性评估。

  • 改进优化器对EXISTSNOT EXISTS查询的行计数估计 (Tom Lane)

  • 使优化器负责评估代价和HAVING子句的选择性 (Tom Lane)

E.3.3.1.5. 一般性能
  • 增加对查询计划的某些部分的即时(JIT)编译,以改进执行性能 (Andres Freund)

    该特性需LLVM可用。当前不是默认启用,即使在构建中支持也不是。

  • 允许在可能时位图扫描执行仅索引扫描 (Alexander Kuzmenkov)

  • 更新VACUUM时空闲空间映射 (Claudio Freire)

    这样允许空闲空间能更快地重用。

  • 允许VACUUM避免不必要的索引扫描 (Masahiko Sawada, Alexander Korotkov)

  • 改进多并发事务的提交性能 (Amit Kapila)

  • 减少那些在目标列表中使用集返回函数的查询的内存使用 (Andres Freund)

  • 改进聚集计算的速度 (Andres Freund)

  • 允许postgres_fdw将使用连接的UPDATEDELETE命令推送到外部服务器 (Etsuro Fujita)

    以前,仅推送非连接的UPDATEDELETE命令。

  • 增加Windows上的大页支持 (Takayuki Tsunakawa, Thomas Munro)

    该功能由huge_pages配置参数来控制。

E.3.3.1.6. 监控
E.3.3.1.6.1. 信息模式
  • 增加与表约束和触发器相关的information_schema列 (Peter Eisentraut)

    特别是现在triggers.action_order,triggers.action_reference_old_tabletriggers.action_reference_new_table都填有数据,而以前则总为空。此外,现在table_constraints.enforced虽然存在,但仍未填入有用数据。

E.3.3.1.7. 认证
  • 允许服务器在搜索+绑定模式中指定更为复杂的LDAP规格要求 (Thomas Munro)

    特别是ldapsearchfilter允许使用LDAP属性组合进行模式匹配。

  • 允许LDAP认证使用加密的LDAP (Thomas Munro)

    我们已经支持TLS上的LDAP,这通过用ldaptls=1来实现。新的TLS LDAP是加密LDAP,用ldapscheme=ldapsldapurl=ldaps://来启用。

  • 改进LDAP错误日志(Thomas Munro)

E.3.3.1.8. 权限
  • 增加启用文件系统访问的默认角色 (Stephen Frost)

    特别地,这些新角色是:pg_read_server_files,pg_write_server_filespg_execute_server_program。这些角色现在还控制着谁可以使用服务器端COPYfile_fdw扩展。以前,仅超级用户才能使用这些功能,这仍然是默认行为。

  • 允许用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表进行无密码的访问,例如通过peer访问。以前,会话拥有者必须为超级用户才允许访问;现在以检查视图拥有者代之。

  • 修复视图上SELECT FOR UPDATE的无效的锁权限检查问题 (Tom Lane)

E.3.3.1.9. 服务器配置
  • 增加服务器参数ssl_passphrase_command以允许提供SSL密钥文件的密语 (Peter Eisentraut)

    此外增加ssl_passphrase_command_supports_reload以详细说明SSL配置是否应重新载入,且服务器配置重新载入时是否调用ssl_passphrase_command

  • 增加存储参数toast_tuple_target,以在考虑用TOAST存储前控制最小的元组长度 (Simon Riggs)

    缺省的TOAST阈值不变。

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

    新单位后缀为B。另外已有的单位是kB, MB, GBTB

E.3.3.1.10. 预写日志 (WAL)
  • 允许initdb时设置WAL文件大小 (Beena Emerson)

    以前,缺省值16MB只能在编译时改变。

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

    以前,为两个检查点保留WAL

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

E.3.3.2. 库备份和流复制

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

  • 将准备事务信息传给逻辑复制订阅者 (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.3.3.3. 实用工具命令

  • 允许ALTER TABLE用非空缺省值添加列,而不需重写表 (Andrew Dunstan, Serge Rielau)

    当缺省值为常数时启用该项功能。

  • 允许用视图所基于的表来锁定视图 (Yugo Nagata)

  • 允许ALTER INDEX为表达式索引设置统计信息收集目标 (Alexander Korotkov, Adrien Nayrat)

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

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

    此外,VACUUM中提及的任何表若使用列(字段)列表,则必须提供ANALYZE关键词;以前此类情况下ANALYZE是隐含在内的。

  • 把括号括起来的选项语法增加到ANALYZE (Nathan Bossart)

    这类似于VACUUM支持的语法。

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

    这有助于允许用户定义聚集函数的优化、用作窗口函数。

E.3.3.4. 数据类型

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

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

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

    也允许PL/Perl, PL/Python和PL/Tcl处理复合域函数参数和结果。亦改进了PL/Python的域处理。

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

E.3.3.5. 函数

  • 增加SQL:2011指定的所有窗口函数帧选项 (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(),支持一种类似于Web搜索引擎使用的查询语法 (Victor Drobny, Dmitry Ivanov)

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

E.3.3.6. 服务器端语言

  • 增加SQL级过程,在过程中能够开始和提交其自身的事务 (Peter Eisentraut)

    用新命令CREATE PROCEDURE创建过程,用CALL来调用。

    新命令ALTER/DROP ROUTINE可以改变/删除所有类似程序的对象,包括过程、函数和聚集。

    而且在CREATE OPERATORCREATE TRIGGER时,现在写FUNCTION比写PROCEDURE好,因为引用的对象必须是函数而非过程。但是,为了兼容性,仍然接受过去的语法。

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

    事务控制仅在顶部事务层过程和仅包含其它DOCALL块的嵌套DOCALL块中可用。

  • 增加将PL/pgSQL复合类型变量定义为非空、常数或带初始值的功能 (Tom Lane)

  • 允许PL/pgSQL处理同一会话中发生在第一次和后来函数执行之间对复合类型的修改 (Tom Lane)

    以前这些情况产生错误。

  • 增加jsonb_plpython扩展以转换JSONB到/自PL/Python类型 (Anthony Bykov)

  • 增加jsonb_plperl扩展以转换JSONB到/自PL/Perl类型 (Anthony Bykov)

E.3.3.7. 客户端接口

  • 修改libpq,以禁用默认的压缩 (Peter Eisentraut)

    现代的OpenSSL版本中,压缩已被禁用,故与这些库一起的libpq设置无效。

  • DO CONTINUE选项加到ecpgWHENEVER语句中 (Vinayak Pokale)

    这会产生C的continue语句,特定条件发生时将导致返回含有它的循环的顶部。

  • 增加ecpg模式以启用Oracle Pro*C风格的字符数组处理方式。

    该模式用-C来启用。

E.3.3.8. 客户端应用程序

E.3.3.8.1. psql
  • 增加psql命令\gdesc以显示查询结果中的列的名字和类型 (Pavel Stehule)

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

    特别地,这些新变量是ERROR,SQLSTATE, ROW_COUNT,LAST_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)

    以前如果无分区,分区表不会显示分区信息。现在也要显示哪些分区是如何划分的。

  • 确保psql提示输入密码时报告确切的用户名 (Tom Lane)

    以前嵌入在URI中的-U和用户名的组合会导致错误的报告。当指定--password时,也会在密码提示之前禁止(显示)用户名。

  • 允许没有先前输入时,使用quitexit退出psql (Bruce Momjian)

    此外输入缓冲区非空时,若在一行中单独使用quitexit,则打印如何退出的提示。对于help也添加了类似的提示。

  • 在一行中单独输入了\q但被忽略时,让psql提示使用CTRL+D (Bruce Momjian)

    例如,当\q是在字符串中给出时,该命令并不退出。

  • 改进ALTER INDEX RESET/SET的制表符 (Masahiko Sawada)

  • 增加允许psql基于服务器版本适配其制表符自动补全查询的基础架构 (Tom Lane)

    以前对老版本服务器的制表符自动补全查询会失败。

E.3.3.8.2. pgbench
  • pgbench中增加对NULL、布尔数和一些函数与操作符的表达式支持 (Fabien Coelho)

  • pgbench中增加\if条件支持 (Fabien Coelho)

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

  • 增加pgbench选项--init-steps以控制初始化步骤的执行 (Masahiko Sawada)

  • 将一种近似于Zipfian分布的随机数发生器添加到pgbench (Alik Khilazhev)

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

  • 允许pgbenchpow()power()来做幂运算 (Raúl Marín Rodríguez)

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

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

E.3.3.9. 服务器应用程序

  • pg_basebackup增加一创建命名复制槽的选项 (Michael Banck)

    使用WAL流式方法时,选项--create-slot创建命名复制槽(--slot)。

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

    该功能用新的initdb选项--allow-group-access来实现。在运行initdb之前,管理员也可以对空数据目录设置组权限。服务器变量data_directory_mode允许读取数据目录组权限。

  • 增加pg_verify_checksums工具以验证离线时数据库校验和 (Magnus Hagander)

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

  • pg_resetwalpg_controldata中增加长选项 (Nathan Bossart, Peter Eisentraut)

  • 为了测试,将--no-sync选项添加到pg_receivewal以防止同步WAL写 (Michael Paquier)

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

  • 允许pg_ctl向进程发送SIGKILL信号 (Andres Freund)

    以前该功能是不支持的,原因是担心可能被误用。

  • 减少pg_rewind复制的文件数量 (Michael Paquier)

  • 防止pg_rewindroot用户运行 (Michael Paquier)

  • 增加pg_dumpall选项--encoding用来控制输出的编码 (Michael Paquier)

    pg_dump已有此选项。

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

    如果系统要加载到不同的排序规则定义或字节序的库,相比以前而言可能需要将行存储在不同的分区。这种情况下就很有用。

  • 增加禁止转储和恢复数据库对象注释的选项 (Robins Tharakan)

    新的pg_dumppg_dumpallpg_restore选项是--no-comments

E.3.3.10. 源代码

  • 增加PGXS支持以安装头文件 (Andrew Gierth)

    这样可支持创建依赖其他模块的扩展模块。以前没有容易的方法让依赖模块找到所引用的模块的头文件。现有的几个定义数据类型的contrib模块已经调整,安装了相关文件。PL/Perl和PL/Python现在也安装了它们的头文件,以支持语言转换模块的创建。

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

  • 将文档转成了DocBook XML格式 (Peter Eisentraut, Alexander Lakhin, Jürgen Purtz)

    为了与以前分支兼容,文件名仍使用sgml扩展名。

  • 在合适的平台上(大多数是这样),使用stdbool.h定义bool类型 (Peter Eisentraut)

    这样就消除了需包含stdbool.h的扩展模块的编码危险。

  • 彻底修改初始系统目录内容定义的方法 (John Naylor)

    初始数据现在用Perl数据结构表示,使之更易进行机械式处理。

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

    该功能目前不支持,因为即使在扩展加载之前也需要参数属性的知识。

  • 使用SCRAM认证时,增加使用通道绑定的功能 (Michael Paquier)

    通道绑定的目的是防止中间人攻击,但SCRAM无法阻止,除非它能被强制激活。不幸的是,在libpq中无法做到。期望在未来的libpq版本和不是由libpql构建的接口如JDBC中支持它。

  • 允许后台工作者连接到通常不允许连接的数据库 (Magnus Hagander)

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

  • 加速用OID对内置函数的查找 (Andres Freund)

    以前的二分法查找被替换为查找数组。

  • 加速查询结果的构造 (Andres Freund)

  • 改进系统缓存的访问速度 (Andres Freund)

  • 增加代内存分配器以对顺序的分配/释放进行优化 (Tomas Vondra)

    这样会减少逻辑解码的内存使用。

  • 使VACUUMpg_class.reltuples的计算与ANALYZE对其的计算一致 (Tomas Vondra)

  • 升级以使用perltidy的版本20170521 (Tom Lane, Peter Eisentraut)

E.3.3.11. 附加模块

  • 允许pg_prewarm启动时恢复以前的共享缓冲区内容 (Mithun Cy, Robert Haas)

    该功能实现的是让pg_prewarm在服务器运行期间和关闭时偶尔将共享缓冲区的关系和块数量的数据保存到磁盘。

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

    为此,已有函数word_similarity(),但其设计是为了找到单词相似的部分,而strict_word_similarity()则是计算整个单词的相似性。

  • 允许创建能用于在citext列上进行LIKE的索引 (Alexey Chernyshov)

    这样做的话,索引就必须用citext_pattern_ops操作符类创建。

  • 允许btree_ginbool, bpchar, nameuuid数据类型进行索引 (Matheus Oliveira)

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

  • 允许用~>操作符接收负的立方体坐标 (Alexander Korotkov)

    这对在查找降序的坐标时做KNN-GiST搜索很有用。

  • 将越南文处理加到unaccent扩展 (Dang Minh Huong, Michael Paquier)

  • 改进amcheck,检查每个堆元组有无索引入口 (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)

  • 移除chkpass扩展 (Peter Eisentraut)

    该扩展不再视为是一种有用的安全工具或如何编写扩展的示例。

E.3.4. 致谢

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

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 Joseph Krogh
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
Dagfinn Ilmari Mannsåker
Dan Vianello
Dan Watson
Dang Minh Huong
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Daniel Wood
Darafei Praliaskouski
Dave Cramer
Dave Page
David Binderman
David Carlier
David Fetter
David G. Johnston
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
Fabrízio de Royes Mello
Feike Steenbergen
Frits Jalvingh
Fujii Masao
Gao Zengqi
Gianni Ciolli
Greg Stark
Gunnlaugur Thor Briem
Guo Xiang Tan
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
Jonathan S. Katz
Julien Rouhaud
Jürgen Purtz
Justin Pryzby
KaiGai Kohei
Kaiting Chen
Karl Lehenbauer
Keith Fiske
Kevin Bloch
Kha Nguyen
Kim Rose Carlsen
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
Mario de Frutos Dieguez
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úl Marín Rodrí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
Todd A. Cook
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
Yi Wen Wong
Yorick Peterse
Yugo Nagata
Yuqi Gu
Yura Sokolov
Yves Goergen
Zhou Digoal