PG 11新特性汇总
Tags: PGPG11新特性PostgreSQL新特性汇总
1. 概述
PostgreSQL11的主要改进有:
分区功能的改进,包括:
- 增加用哈希键分区的支持
- 增加分区表上
PRIMARY KEY
,FOREIGN KEY
,索引和触发器的支持 - 允许创建“default”分区,以存储与其余分区都不匹配的数据
- 改变分区键列的
UPDATE
语句现在会导致受到影响的行移动到适当的分区 - 在查询计划和执行时通过增强分区排除策略来提高
SELECT
性能
并行性改进,包括:
- 现在构建B-树索引时
CREATE INDEX
可使用并行处理 - 现在
CREATE TABLE ... AS
,CREATE MATERIALIZED VIEW
和某些使用UNION
的查询中并行是可能的 - 并行化的哈希连接和并行化顺序扫描现在表现更好
- 现在构建B-树索引时
支持嵌入式事务的SQL存储过程
本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!对于一些SQL代码,可用即时(JIT)编译加速表达式评估
窗口函数现在支持SQL:2011标准中的所有帧选项,包括
RANGE *
distance*PRECEDING/FOLLOWING
,GROUPS
模式和帧排除选项现在使用
CREATE INDEX
的INCLUDE
子句可创建覆盖索引其它很多有用的性能改进,包括在
ALTER TABLE ... ADD COLUMN
以非空列作为缺省时避免对表重写的能力
以上的项在下面的章节中详细说明。
2. 迁移到版本11
要从任何以前的版本迁移数据,需要使用pg_dumpall或使用pg_upgrade来转储/恢复。
版本11包含一些影响到与以前的版本的兼容性的修改。注意以下不兼容的方面:
使pg_dump转储数据库属性,而不仅仅是其内容 (Haribabu Kommi)
以前,数据库本身的属性,例如数据库级的
GRANT
/REVOKE
权限和ALTER DATABASE SET
变量设置,仅由pg_dumpall来转储。现在pg_dump --create
和pg_restore --create
将恢复数据库中的属性和对象。pg_dumpall -g
现在仅转储角色和表空间相关属性。pg_dumpall的全部输出(无-g
)未改变。pg_dump和pg_restore,没有
--create
选项时,不在转储/恢复数据库级注释和安全标记,这些内容现在被当作数据库属性。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
;现在接受两种异常。power(float8, float8)
遵循标准只要C库支持;但在一些老的Unix平台上C库并未遵循标准,在Windows的一些版本上也有问题。防止
to_number()
在模板分隔符不匹配时消耗掉字符 (Oliver Ford)特别地,
SELECT to_number('1234', '9,999')
过去返回134
,现在返回1234
。L
和TH
现在仅消掉非数字、正/负符号、小数点和逗号的字符。修复
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_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)以前,对这些变量的引用可被解析但不执行。
3. 修改列表
下面是PostgreSQL11和以前主版本间的变更的详细说明。
3.1. 服务器
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
,UPDATE
和COPY
,将行正确地路由到外部分区 (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)
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 INTO
和CREATE MATERIALIZED VIEW
并行化 (Haribabu Kommi)改进有许多并行工作者时顺序扫描的性能 (David Rowley)
在
EXPLAIN
中增加并行工作者排序活动的报告 (Robert Haas, Tom Lane)
3.1.3. 索引
允许B-树索引包含不是搜索键或唯一约束的,但可用于仅索引扫描读的列 (Anastasia Lubennikova, Alexander Korotkov, Teodor Sigaev)
该功能可用
CREATE INDEX
的新的INCLUDE
子句来启用。它利用构造“覆盖索引”来优化特定类型的查询。可包含一些列,即使其数据类型B-树不支持。改进索引不断增长时的性能 (Pavan Deolasee, Peter Geoghegan)
改进哈希索引扫描的性能 (Ashutosh Sharma)
为哈希、GiST和GIN索引添加谓词锁 (Shubham Barai)
这样减少了序列化模式事务中序列化冲突的可能性。
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)
3.1.4. 优化器
改进统计信息最频值的选择 (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)
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
将使用连接的UPDATE
和DELETE
命令推送到外部服务器 (Etsuro Fujita)以前,仅推送非连接的
UPDATE
和DELETE
命令。增加Windows上的大页支持 (Takayuki Tsunakawa, Thomas Munro)
该功能由huge_pages配置参数来控制。
3.1.6. 监控
在
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)
3.1.6.1. 信息模式
增加与表约束和触发器相关的
information_schema
列 (Peter Eisentraut)特别是现在
triggers
.action_order
,triggers
.action_reference_old_table
和triggers
.action_reference_new_table
都填有数据,而以前则总为空。此外,现在table_constraints
.enforced
虽然存在,但仍未填入有用数据。
3.1.7. 认证
允许服务器在搜索+绑定模式中指定更为复杂的LDAP规格要求 (Thomas Munro)
特别是
ldapsearchfilter
允许使用LDAP属性组合进行模式匹配。允许LDAP认证使用加密的LDAP (Thomas Munro)
我们已经支持TLS上的LDAP,这通过用
ldaptls=1
来实现。新的TLS LDAP是加密LDAP,用ldapscheme=ldaps
或ldapurl=ldaps://
来启用。改进LDAP错误日志(Thomas Munro)
3.1.8. 权限
增加启用文件系统访问的默认角色 (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)
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”, “GB”和“TB”。
3.1.10. 预写日志 (WAL)
允许initdb时设置WAL文件大小 (Beena Emerson)
以前,缺省值16MB只能在编译时改变。
仅为单个检查点保留WAL数据 (Simon Riggs)
以前,为两个检查点保留WAL。
为提高压缩率,以零填充强制切换的WAL段文件的未使用部分 (Chapman Flack)
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)
3.3. 实用工具命令
允许
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)这有助于允许用户定义聚集函数的优化、用作窗口函数。
3.4. 数据类型
允许创建域数组 (Tom Lane)
这也允许
array_agg()
用在域上。支持符合类型上的域 (Tom Lane)
也允许PL/Perl, PL/Python和PL/Tcl处理复合域函数参数和结果。亦改进了PL/Python的域处理。
增加从
JSONB
标量到数字和布尔数据类型的类型转换 (Anastasia Lubennikova)
3.5. 函数
增加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()
,支持一种类似于Web搜索引擎使用的查询语法 (Victor Drobny, Dmitry Ivanov)增加
json(b)_to_tsvector()
函数以创建用于匹配JSON
/JSONB
值的文本搜索查询 (Dmitry Dolgov)
3.6. 服务器端语言
增加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处理同一会话中发生在第一次和后来函数执行之间对复合类型的修改 (Tom Lane)
以前这些情况产生错误。
增加
jsonb_plpython
扩展以转换JSONB
到/自PL/Python类型 (Anthony Bykov)增加
jsonb_plperl
扩展以转换JSONB
到/自PL/Perl类型 (Anthony Bykov)
3.7. 客户端接口
修改libpq,以禁用默认的压缩 (Peter Eisentraut)
现代的OpenSSL版本中,压缩已被禁用,故与这些库一起的libpq设置无效。
将
DO CONTINUE
选项加到ecpg的WHENEVER
语句中 (Vinayak Pokale)这会产生C的
continue
语句,特定条件发生时将导致返回含有它的循环的顶部。增加ecpg模式以启用Oracle Pro*C风格的字符数组处理方式。
该模式用
-C
来启用。
3.8. 客户端应用程序
3.8.1. psql
增加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)
以前嵌入在URI中的
-U
和用户名的组合会导致错误的报告。当指定--password
时,也会在密码提示之前禁止(显示)用户名。允许没有先前输入时,使用
quit
和exit
退出psql (Bruce Momjian)此外输入缓冲区非空时,若在一行中单独使用
quit
和exit
,则打印如何退出的提示。对于help
也添加了类似的提示。在一行中单独输入了
\q
但被忽略时,让psql提示使用CTRL+D (Bruce Momjian)例如,当
\q
是在字符串中给出时,该命令并不退出。改进
ALTER INDEX RESET
/SET
的制表符 (Masahiko Sawada)增加允许psql基于服务器版本适配其制表符自动补全查询的基础架构 (Tom Lane)
以前对老版本服务器的制表符自动补全查询会失败。
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)
- 允许pgbench用
pow()
和power()
来做幂运算 (Raúl Marín Rodríguez) - 将哈希函数添加到pgbench (Ildar Musin)
- 当使用
--latency-limit
和--rate
时,使pgbench统计更准确 (Fabien Coelho)
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_resetwal和pg_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_rewind从
root
用户运行 (Michael Paquier)
3.9.1. pg_dump, pg_dumpall, pg_restore
增加pg_dumpall选项
--encoding
用来控制输出的编码 (Michael Paquier)pg_dump已有此选项。
增加pg_dump选项
--load-via-partition-root
,强制将数据加载到分区的根表中,而不是原来的分区 (Rushabh Lathia)如果系统要加载到不同的排序规则定义或字节序的库,相比以前而言可能需要将行存储在不同的分区。这种情况下就很有用。
增加禁止转储和恢复数据库对象注释的选项 (Robins Tharakan)
新的pg_dumppg_dumpall和pg_restore选项是
--no-comments
。
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)
这样会减少逻辑解码的内存使用。
使
VACUUM
对pg_class
.reltuples
的计算与ANALYZE
对其的计算一致 (Tomas Vondra)升级以使用perltidy的版本
20170521
(Tom Lane, Peter Eisentraut)
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_gin
对bool
,bpchar
,name
和uuid
数据类型进行索引 (Matheus Oliveira)允许用
~>
操作符接收负的立方体坐标 (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)该扩展不再视为是一种有用的安全工具或如何编写扩展的示例。