发布日期:. 2018-10-18
PostgreSQL 11 的主要增强包括:
分区功能改进,包括:
添加按哈希键分区的支持
添加分区表上的 PRIMARY KEY、FOREIGN KEY、索引和触发器支持
允许创建“默认”分区,用于存储不匹配其他任何分区的数据
更改分区键列的 UPDATE 语句现在会将受影响的行移动到适当的分区
通过增强查询规划和执行期间的分区排除策略,提高 SELECT 性能
并行执行改进,包括:
CREATE INDEX 现在可以在构建 B-树索引时使用并行处理
CREATE TABLE ... AS、CREATE MATERIALIZED VIEW 以及某些使用 UNION 的查询现在可以并行执行
提高并行哈希连接和并行顺序扫描的性能
支持内嵌事务的 SQL 存储过程
为部分 SQL 代码提供可选的即时(JIT)编译,加快表达式求值
窗口函数现在支持 SQL:2011 标准中的所有窗口帧选项,包括 RANGE 、distance PRECEDING/FOLLOWINGGROUPS 模式和帧排除选项
现在可以使用 CREATE INDEX 的 INCLUDE 子句创建覆盖索引
许多其他有用的性能改进,包括在使用非空列默认值执行 ALTER TABLE ... ADD COLUMN 时避免重写表
以下各节将更详细地说明上述项目。
对于希望从任何先前版本迁移数据的用户,需要使用 pg_dumpall 进行导出/恢复,或使用 pg_upgrade 或逻辑复制。 有关迁移到新主版本的一般信息,请参见 Section 18.6。
版本 11 包含许多可能影响与先前版本兼容性的变更。 请注意以下不兼容性:
使 pg_dump 转储数据库的属性,而不只是内容(Haribabu Kommi)
以前,数据库本身的属性,例如数据库级 GRANT/REVOKE 权限和 ALTER DATABASE SET 变量设置,只能由 pg_dumpall 转储。现在,pg_dump --create 和 pg_restore --create 除恢复数据库内的对象外,也会恢复这些数据库属性。pg_dumpall -g 现在仅转储角色和表空间相关属性。pg_dumpall 的完整输出(不带 -g)保持不变。
如果没有指定 --create,pg_dump 和 pg_restore 不再转储/恢复数据库级注释和安全标签;这些内容现在被视为数据库的属性。
pg_dumpall 的输出脚本现在始终使用数据库原有的区域设置和编码创建数据库,因此如果目标系统不认识该区域设置或编码名称,操作就会失败。以前,如果数据库的区域设置和编码与旧集群的默认值一致,输出的 CREATE DATABASE 就不会包含这些指定。
pg_dumpall --clean 现在会恢复 postgres 和 template1 数据库的原始区域设置和编码,以及用户创建数据库的相应设置。
在消除函数引用与列引用之间的歧义时,考虑语法形式(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 = 1 且 1 ^ NaN = 1,但其他所有包含 NaN 输入的情况都应返回 NaN。power(numeric, numeric) 以前在所有此类情况下都返回 NaN,现在会遵循这两个例外。只要 C 库符合标准,power(float8, float8) 就会符合标准;但某些旧 Unix 平台的库不符合标准,某些 Windows 版本上也存在问题。
当模板分隔符不匹配时,防止 to_number() 消耗字符(Oliver Ford)
具体而言,SELECT to_number('1234', '9,999') 以前返回 134,现在会返回 1234。L 和 TH 现在只消耗数字、正负号、小数点和逗号以外的字符。
修复 to_date()、to_number() 和 to_timestamp(),使其对每个模板字符跳过一个字符(Tom Lane)
以前,它们对模板字符的每个字节跳过一个字节,如果任一字符串包含多字节字符,就会出现异常行为。
调整 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_proc 的 proisagg 和 proiswindow 列替换为 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 触发器函数中,未赋值的 OLD 和 NEW 变量现在读取为 NULL(Tom Lane)
以前,对这些变量的引用可以解析,但无法执行。
以下是 PostgreSQL 11 与上一个主版本之间变更的详细说明。
允许根据键列的哈希值创建分区(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、UPDATE 和 COPY 将行正确路由到外部分区(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)
允许并行构建 B-树索引(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 ... AS、SELECT INTO 和 CREATE MATERIALIZED VIEW 命令(Haribabu Kommi)
提高使用大量并行工作进程时顺序扫描的性能(David Rowley)
在 EXPLAIN 中添加并行工作进程排序活动的报告(Robert Haas,Tom Lane)
允许 B-树索引包含不属于搜索键或唯一约束、但可供仅索引扫描读取的列(Anastasia Lubennikova,Alexander Korotkov,Teodor Sigaev)
这通过 CREATE INDEX 的新 INCLUDE 子句启用。它便于构建优化特定查询类型的“覆盖索引”。即使列的数据类型不支持 B-树,也可以将其包含在内。
提高单调递增的索引插入的性能(Pavan Deolasee,Peter Geoghegan)
提高哈希索引扫描的性能(Ashutosh Sharma)
为哈希、GiST 和 GIN 索引添加谓词锁定(Shubham Barai)
这降低了可串行化模式事务发生串行化冲突的可能性。
添加前缀匹配操作符 text ^@ text,并由 SP-GiST 支持(Ildus Kurbangaliev)
这类似于配合 B-树索引使用 var LIKE 'word%',但效率更高。
允许使用 SP-GiST 对多边形建立索引(Nikita Glukhov,Alexander Korotkov)
允许 SP-GiST 对叶子键使用有损表示(Teodor Sigaev,Heikki Linnakangas,Alexander Korotkov,Nikita Glukhov)
改进统计信息中高频值的选择(Jeff Janes,Dean Rasheed)
以前,根据某个值相对于所有列值的频率来识别高频值(MCV)。现在,根据其相对于非 MCV 值的频率选择 MCV。这提高了算法在均匀分布和非均匀分布下的稳健性。
改进 >= 和 <= 的选择率估算(Tom Lane)
以前,除非比较常量为 MCV,这些情况分别采用与 > 和 < 相同的选择率估算。此更改对涉及小范围 BETWEEN 的查询尤其有帮助。
在等价的情况下,将 var = var 简化为 var IS NOT NULL(Tom Lane)
这会改善选择率估算。
改进优化器对 EXISTS 和 NOT EXISTS 查询的行数估算(Tom Lane)
使优化器考虑 HAVING 子句的求值代价和选择率(Tom Lane)
为查询计划的某些部分添加即时(JIT)编译,以提高执行速度(Andres Freund)
此特性要求 LLVM 可用。目前,即使构建支持它,默认也不启用。
允许位图扫描在可能时执行仅索引扫描(Alexander Kuzmenkov)
在 VACUUM 期间更新空闲空间映射(Claudio Freire)
这使空闲空间能够更快地被复用。
允许 VACUUM 避免不必要的索引扫描(Masahiko Sawada,Alexander Korotkov)
提高提交多个并发事务的性能(Amit Kapila)
减少目标列表中使用返回集合函数的查询的内存用量(Andres Freund)
提高聚合计算的速度(Andres Freund)
允许 postgres_fdw 将使用连接的 UPDATE 和 DELETE 下推到外部服务器(Etsuro Fujita)
以前,只会下推不含连接的 UPDATE 和 DELETE。
添加对 Windows 上大页的支持(Takayuki Tsunakawa,Thomas Munro)
这由 huge_pages 配置参数控制。
在 log_statement_stats、log_parser_stats、log_planner_stats 和 log_executor_stats 的输出中显示内存用量(Justin Pryzby,Peter Eisentraut)
添加 pg_stat_activity.backend_type 列,以显示后台工作进程的类型(Peter Eisentraut)
该类型在 ps 输出中也可见。
使 log_autovacuum_min_duration 记录因正被并发删除而跳过的表(Nathan Bossart)
添加与表约束和触发器相关的 information_schema 列(Peter Eisentraut)
具体而言,triggers.action_order、triggers.action_reference_old_table 和 triggers.action_reference_new_table 现在会填入值,而以前始终为空。此外,table_constraints.enforced 列现在已存在,但尚未填入有用的值。
允许服务器在 search+bind 模式下使用更复杂的 LDAP 配置(Thomas Munro)
具体而言,ldapsearchfilter 允许组合 LDAP 属性进行模式匹配。
允许 LDAP 认证使用加密的 LDAP(Thomas Munro)
以前已可通过 ldaptls=1 支持基于 TLS 的 LDAP。这种用于加密 LDAP 的新 TLS LDAP 方式,通过 ldapscheme=ldaps 或 ldapurl=ldaps:// 启用。
改进 LDAP 错误的日志记录(Thomas Munro)
添加允许文件系统访问的默认角色(Stephen Frost)
具体来说,新增角色是 pg_read_server_files、pg_write_server_files 和 pg_execute_server_program。这些角色现在还控制谁可以使用服务器端的 COPY 和 file_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)
添加服务器设置 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”、“GB” 和 “TB” 并用。
允许在 initdb 期间设置 WAL 文件大小(Beena Emerson)
以前,16MB 的默认值只能在编译时更改。
仅保留一个检查点周期的 WAL 数据(Simon Riggs)
以前,会保留两个检查点周期的 WAL。
将被强制切换的 WAL 段文件的未使用部分填零,以提高可压缩性(Chapman Flack)
使用逻辑复制时复制 TRUNCATE 操作(Simon Riggs,Marco Nenciarini,Peter Eisentraut)
将预备事务信息传递给逻辑复制订阅者(Nikhil Sontakke,Stas Kelvich)
从流式基础备份中排除不记录 WAL 的表、临时表和 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)
允许 ALTER TABLE 添加具有非空默认值的列,而无需重写表(Andrew Dunstan,Serge Rielau)
默认值为常量时会启用此优化。
允许通过锁定底层表来锁定视图(Yugo Nagata)
允许 ALTER INDEX 设置表达式索引的统计收集目标(Alexander Korotkov,Adrien Nayrat)
在 psql 中,\d+ 现在会显示索引的统计目标。
允许在一条 VACUUM 或 ANALYZE 命令中指定多个表(Nathan Bossart)
此外,如果 VACUUM 中提到的任何表使用了列列表,就必须提供 ANALYZE 关键字;以前,此类情况会隐含执行 ANALYZE。
为 ANALYZE 添加括号包围的选项语法(Nathan Bossart)
这与 VACUUM 支持的语法类似。
添加 CREATE AGGREGATE 选项,以指定聚合最终函数的行为(Tom Lane)
这有助于优化用户定义的聚合函数,并使其能够用作窗口函数。
允许创建域的数组(Tom Lane)
这也允许对域使用 array_agg()。
支持基于复合类型的域(Tom Lane)
同时允许 PL/Perl、PL/Python 和 PL/Tcl 处理复合类型域的函数参数和结果,并改进 PL/Python 的域处理。
添加从 JSONB 标量到数值和布尔数据类型的类型转换(Anastasia Lubennikova)
添加 SQL:2011 规定的所有窗口函数帧选项(Oliver Ford,Tom Lane)
具体而言,允许 RANGE 模式使用 PRECEDING 和 FOLLOWING,选取分组值位于加减指定偏移量范围内的行。添加 GROUPS 模式,以包含前后指定数量的同等行组。同时添加了帧排除语法。
添加 SHA-2 系列哈希函数(Peter Eisentraut)
具体添加了 sha224()、sha256()、sha384() 和 sha512()。
添加对 64 位非密码学哈希函数的支持(Robert Haas,Amul Sul)
允许 to_char() 和 to_timestamp() 以小时和分钟指定时区相对于 UTC 的偏移量(Nikita Glukhov,Andrew Dunstan)
这通过格式指定符 TZH 和 TZM 完成。
添加文本搜索函数 websearch_to_tsquery(),支持类似网页搜索引擎所用的查询语法(Victor Drobny,Dmitry Ivanov)
添加函数 json(b)_to_tsvector(),以创建用于匹配 JSON/JSONB 值的文本搜索查询(Dmitry Dolgov)
添加 SQL 级过程,使其能够开始并提交自己的事务(Peter Eisentraut)
它们使用新的 CREATE PROCEDURE 命令创建,并通过 CALL 调用。
新的 ALTER/DROP ROUTINE 命令允许更改/删除所有例程类对象,包括过程、函数和聚合。
另外,在 CREATE OPERATOR 和 CREATE TRIGGER 中,现在推荐使用 FUNCTION 而非 PROCEDURE,因为所引用的对象必须是函数,而不能是过程。不过,为保持兼容,仍然接受旧语法。
为 PL/pgSQL、PL/Perl、PL/Python、PL/Tcl 和 SPI 服务器端语言添加事务控制(Peter Eisentraut)
事务控制仅可用于事务顶层的过程,以及嵌套的 DO 和 CALL 块;嵌套层次中只能包含其他 DO 和 CALL 块。
添加将 PL/pgSQL 复合类型变量定义为非空、常量或带初始值的能力(Tom Lane)
允许 PL/pgSQL 处理同一会话中首次和后续函数执行之间发生的复合类型(如 record、row)变更(Tom Lane)
以前,这类情况会产生错误。
添加扩展 jsonb_plpython,以在 JSONB 和 PL/Python 类型之间进行转换(Anthony Bykov)
添加扩展 jsonb_plperl,以在 JSONB 和 PL/Perl 类型之间进行转换(Anthony Bykov)
更改 libpq,使其默认禁用压缩(Peter Eisentraut)
现代 OpenSSL 版本已禁用压缩,因此 libpq 的这一设置对这些库并无影响。
为 ecpg 的 WHENEVER 语句添加 DO CONTINUE 选项(Vinayak Pokale)
这会生成 C continue 语句,在指定条件发生时返回所在循环的顶部。
添加 ecpg 模式,以启用 Oracle Pro*C 风格的字符数组处理。
此模式通过 -C 启用。
添加 psql 命令 \gdesc,以显示查询结果中各列的名称和类型(Pavel Stehule)
添加 psql 变量,以报告查询活动和错误(Fabien Coelho)
具体新增变量为 ERROR、SQLSTATE、ROW_COUNT、LAST_ERROR_MESSAGE 和 LAST_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)
以前,同时使用 -U 和嵌入 URI 的用户名会导致显示错误的用户名。另外,在指定 --password 时,不再在密码提示前显示用户名。
在此前没有输入的情况下,允许 quit 和 exit 退出 psql(Bruce Momjian)
当输入缓冲区非空,而 quit 和 exit 单独出现在一行时,也会输出如何退出的提示。为 help 添加类似提示。
当 \q 单独输入在一行上却被忽略时,让 psql 提示使用 control-D(Bruce Momjian)
例如,在字符串内输入 \q 不会退出。
改进 ALTER INDEX RESET/SET 的 Tab 补全(Masahiko Sawada)
添加基础支持,使 psql 能够根据服务器版本调整 Tab 补全查询(Tom Lane)
以前,对旧版服务器执行 Tab 补全查询可能失败。
为 pgbench 表达式添加对 NULL、布尔值以及某些函数和操作符的支持(Fabien Coelho)
为 pgbench 添加 \if 条件支持(Fabien Coelho)
允许在 pgbench 变量名中使用非 ASCII 字符(Fabien Coelho)
添加 pgbench 选项 --init-steps,以控制执行哪些初始化步骤(Masahiko Sawada)
为 pgbench 添加近似服从 Zipf 分布的随机数生成器(Alik Khilazhev)
允许在 pgbench 中设置随机种子(Fabien Coelho)
允许 pgbench 使用 pow() 和 power() 执行幂运算(Raúl Marín Rodríguez)
为 pgbench 添加哈希函数(Ildar Musin)
提高使用 --latency-limit 和 --rate 时 pgbench 统计信息的准确性(Fabien Coelho)
为 pg_basebackup 添加创建命名复制槽的选项(Michael Banck)
使用 WAL 流式方法(--wal-method=stream)时,--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_resetwal 和 pg_controldata 添加长选项(Nathan Bossart,Peter Eisentraut)
为 pg_receivewal 添加 --no-sync 选项,用于测试时禁止同步 WAL 写入(Michael Paquier)
添加 pg_receivewal 选项 --endpos,以指定何时停止接收 WAL(Michael Paquier)
允许 pg_ctl 向进程发送 SIGKILL 信号(Andres Freund)
以前因担心可能被误用而不支持此功能。
减少 pg_rewind 复制的文件数量(Michael Paquier)
禁止以 root 身份运行 pg_rewind(Michael Paquier)
添加 pg_dumpall 选项 --encoding,以控制输出编码(Michael Paquier)
pg_dump 已有此选项。
添加 pg_dump 选项 --load-via-partition-root,强制将数据加载到分区的根表,而非原分区(Rushabh Lathia)
当加载目标系统具有不同的排序规则定义或字节序,可能需要将行存储到与以前不同的分区时,此选项很有用。
添加禁止转储和恢复数据库对象注释的选项(Robins Tharakan)
pg_dump、pg_dumpall 和 pg_restore 的新选项为 --no-comments。
为 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,以及不基于 libpq 构建的接口(例如 JDBC)将支持此功能。
允许后台工作进程连接到通常不允许连接的数据库(Magnus Hagander)
添加对 ARMv8 上硬件 CRC 计算的支持(Yuqi Gu,Heikki Linnakangas,Thomas Munro)
加快按 OID 查找内置函数的速度(Andres Freund)
以前的二分查找已被查找数组取代。
加快查询结果的构建速度(Andres Freund)
提高系统缓存访问速度(Andres Freund)
添加针对顺序分配/释放优化的分代内存分配器(Tomas Vondra)
这减少了逻辑解码的内存用量。
使 VACUUM 对 pg_class.reltuples 的计算与 ANALYZE 一致(Tomas Vondra)
更新为使用 perltidy 20170521 版(Tom Lane,Peter Eisentraut)
允许扩展 pg_prewarm 在启动时恢复先前的共享缓冲区内容(Mithun Cy,Robert Haas)
实现方式是让 pg_prewarm 在服务器运行期间不时地、并在关闭时,将共享缓冲区的关系和块号数据存储到磁盘。
添加 pg_trgm 函数 strict_word_similarity(),以计算完整单词的相似度(Alexander Korotkov)
已有的 word_similarity() 函数也用于此目的,但它的设计是寻找单词中相似的部分,而 strict_word_similarity() 计算的是与完整单词的相似度。
允许 btree_gin 对 bool、bpchar、name 和 uuid 数据类型建立索引(Matheus Oliveira)
允许使用 ~> 操作符获取 cube 坐标的负值(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)
此扩展不再被视为可用的安全工具或编写扩展的示例。
以下人员(按字母顺序排列)作为补丁作者、提交者、审查者、测试者 或问题报告者为本版本做出了贡献。
| 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 |