E.9.发行 11
发布日期: 2018-10-18
E.9.1. Overview
PostgreSQL 11 中的主要增强功能包括:
-
分区功能的改进,包括:
-
添加对通过哈希键进行分区的支持
-
添加对分区表上的
PRIMARY KEY
,FOREIGN KEY
,索引和触发器的支持 -
允许创建“默认”分区来存储与其余分区都不匹配的数据
-
UPDATE
更改分区键列的语句现在导致受影响的行移动到适当的分区 -
在查询计划和执行过程中通过增强的分区消除策略提高
SELECT
性能
-
-
对并行性的改进,包括:
-
CREATE INDEX
现在可以在构建 B 树索引时使用并行处理-
现在可以在
CREATE TABLE ... AS
,CREATE MATERIALIZED VIEW
和使用UNION
的某些查询中进行并行化 -
并行散列连接和并行 Sequences 扫描现在表现更好
-
-
支持嵌入式事务的 SQL 存储过程
-
某些 SQL 代码的可选即时(JIT)编译,可加快表达式的求值速度
-
窗口功能现在支持 SQL:2011 标准中显示的所有框架选项,包括
RANGE distance PRECEDING/FOLLOWING
,GROUPS
模式和框架排除选项 -
现在可以使用
CREATE INDEX
的INCLUDE
子句创建覆盖索引 -
许多其他有用的性能改进,包括避免使用默认为非空列的
ALTER TABLE ... ADD COLUMN
重写表的功能
在以下各节中将更详细地说明上述各项。
E.9.2. 迁移到版本 11
那些希望从任何先前版本迁移数据的用户都需要使用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 不再转储/恢复数据库级 Comments 和安全标签;这些现在被视为数据库的属性。
pg_dumpall 的输出脚本现在将始终使用原始语言环境和编码来创建数据库,因此,如果目标系统不知道该语言环境或编码名称,它将失败。以前,如果数据库的语言环境和编码与旧集群的默认值匹配,则将在没有这些规范的情况下发出CREATE DATABASE
。
pg_dumpall --clean
现在恢复postgres
和template1
数据库以及用户创建的数据库的原始语言环境和编码设置。
- 在对函数和列引用进行歧义消除时考虑语法形式(Tom Lane)
当* x
*是表名或复合列时,PostgreSQL 传统上认为f(x)
和x.f
的语法形式是等效的,从而允许诸如编写函数然后将其当作按需计算列的使用之类的技巧。但是,如果两种解释都可行,则始终选择列解释,如果用户打算使用函数解释,则会导致令人惊讶的结果。现在,如果存在歧义,则选择与句法形式匹配的解释。
- 完全强制表和域约束名称的唯一性(Tom Lane)
PostgreSQL 期望表约束的名称是不同的,同样,对于域约束的名称也是如此。但是,对此并没有严格执行,并且以前在某些极端情况下可以创建重复的名称。
- 根据 POSIX 标准(Tom Lane,Dang Minh Huong)使
power(numeric, numeric)
和power(float8, float8)
处理NaN
Importing
POSIX 表示NaN ^ 0 = 1
和1 ^ NaN = 1
,但是所有其他具有NaN
Importing 的情况都应返回NaN
。在所有这些情况下,power(numeric, numeric)
刚刚返回了NaN
;现在,它尊重这两个 exception。如果 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)
以前,他们为模板字符的每个字节跳过一个* 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_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
安装将 continue 有权使用这些功能,直到通过ALTER EXTENSION ... UPDATE
更新它们为止。
- 荣誉大写双引号命令选项(Daniel Gustafsson)
以前,即使使用双引号 Importing,某些 SQL 命令中的选项名称也被强制小写。因此,例如"FillFactor"
将被接受为索引存储选项,尽管其名称正确为小写。现在,此类情况将产生错误。
- 删除服务器参数
replacement_sort_tuples
(Peter Geoghegan)
确定替换种类不再有用。
- 删除CREATE FUNCTION中的
WITH
子句(Michael Paquier)
PostgreSQL 长期以来就为此功能支持更符合标准的语法。
- 在 PL/pgSQL 触发函数中,未分配时,
OLD
和NEW
变量现在读为 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) -
允许分区表上的
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)
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 ... AS
,SELECT INTO
和CREATE 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
(等效于汤姆巷)
这导致更好的选择性估计。
-
改善
EXISTS
和NOT 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使用到外部服务器的连接推送
UPDATE
和DELETE
(藤田悦郎)
以前,仅推入非联接的UPDATE
和DELETE
。
- 在 Windows 上添加对“大页面”的支持(Takayuki Tsunakawa,Thomas Munro)
这由huge_pages配置参数控制。
E.9.3.1.6. Monitoring
-
在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)
E.9.3.1.6.1. 信息架构
- 添加与表约束和触发器相关的
information_schema
列(Peter Eisentraut)
具体来说,是triggers
。 action_order
,triggers
。 action_reference_old_table
和triggers
。现在已填充action_reference_new_table
,在此之前它们始终为 null。另外,table_constraints
。 enforced
现在存在,但尚未填充。
E.9.3.1.7. Authentication
- 允许服务器在搜索绑定模式下指定更复杂的LDAP规范(Thomas Munro)
具体来说,ldapsearchfilter
允许使用 LDAP 属性的组合进行模式匹配。
- 允许 LDAP 身份验证使用加密的 LDAP(Thomas Munro)
我们已经通过使用ldaptls=1
支持 TLS 上的 LDAP。通过ldapscheme=ldaps
或ldapurl=ldaps://
启用了这种用于加密 LDAP 的新 TLS LDAP 方法。
- 改善 LDAP 错误的记录(Thomas Munro)
E.9.3.1.8. Permissions
- 添加default roles以启用文件系统访问(Stephen Frost)
具体来说,新角色是:pg_read_server_files
,pg_write_server_files
和pg_execute_server_program
。这些角色现在还控制谁可以使用服务器端COPY
和file_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以允许提供 SSL 密钥文件的密码(Peter Eisentraut)
还添加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+
现在显示索引的统计信息目标。
- 允许在一个
VACUUM
或ANALYZE
命令中指定多个表(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
模式使用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)
E.9.3.6. 服务器端语言
- 添加 SQL 级过程,可以启动和提交自己的事务(Peter Eisentraut)
它们使用新的CREATE PROCEDURE命令创建,并通过CALL调用。
新的ALTER
/DROP ROUTINE
命令允许更改/删除所有类似于例程的对象,包括过程,函数和集合。
另外,现在最好写FUNCTION
而不是在CREATE OPERATOR
和CREATE TRIGGER
中写PROCEDURE
,因为引用的对象必须是函数而不是过程。但是,出于兼容性考虑,仍接受旧语法。
- 将事务控制添加到 PL/pgSQL,PL/Perl,PL/Python,PL/Tcl 和 SPI 服务器端语言(Peter Eisentraut)
事务控制仅在顶级事务级过程以及嵌套的DO
和CALL
块(仅包含其他DO
和CALL
块)内可用。
-
添加将 PL/pgSQL 复合类型变量定义为非 null,常量或具有初始值的功能(Tom Lane)
-
允许 PL/pgSQL 处理在同一会话(Tom Lane)中的第一个和以后的函数执行之间发生的对复合类型(例如记录,行)的更改
以前,这种情况会产生错误。
-
添加 extensions
jsonb_plpython
以将JSONB
转换成 PL/Python 类型(或从 PL/Python 类型转换)(Anthony Bykov) -
添加 extensions
jsonb_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)
具体来说,新变量是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)
以前,如果分区表没有分区,则不会显示分区信息。同时指出哪些分区本身已分区。
- 提示 Importing 密码时,确保 psql 报告正确的用户名(Tom Lane)
以前,-U
和嵌入 URI 的用户名的组合会导致错误的报告。当指定--password
时,还要在密码提示前取消显示用户名。
- 在没有事先 Importing 的情况下,允许
quit
和exit
退出 psql(Bruce Momjian)
还打印有关在 Importing 缓冲区不为空的情况下在一行上单独使用quit
和exit
时如何退出的提示。为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_ctl将
SIGKILL
signal 发送到进程(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)
文件名仍使用sgml
extensions 以与后分支兼容。
- 在最适合的平台上使用
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
的计算。reltuples
乘VACUUM
与其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索引
bool
,bpchar
,name
和uuid
数据类型(Matheus Oliveira) -
允许使用
~>
运算符检索负立方坐标(亚历山大·科罗特科夫)
在按降序查找坐标时,这对于 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) -
删除
chkpass
extensions(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 |