E.9.发行 11

发布日期: 2018-10-18

E.9.1. Overview

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

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

E.9.2. 迁移到版本 11

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

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

以前,数据库本身的属性(例如数据库级别的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数据库以及用户创建的数据库的原始语言环境和编码设置。

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

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

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

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

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

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

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

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

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

此新输出符合 SQL 标准。

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

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

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

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

确定替换种类不再有用。

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

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

E.9.3. Changes

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

E.9.3.1. Server

E.9.3.1.1. Partitioning

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

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

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

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

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

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

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

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

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

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

E.9.3.1.2. 并行查询

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

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

E.9.3.1.3. Indexes

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

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

E.9.3.1.3.1. SP-Gist

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

E.9.3.1.4. Optimizer

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

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

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

E.9.3.1.5. 一般表现

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

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

以前,仅推入非联接的UPDATEDELETE

这由huge_pages配置参数控制。

E.9.3.1.6. Monitoring

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

E.9.3.1.6.1. 信息架构

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

E.9.3.1.7. Authentication

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

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

E.9.3.1.8. Permissions

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

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

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

编译时选项ALLOW_DANGEROUS_LO_FUNCTIONS已被删除。

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

E.9.3.1.9. 服务器配置

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

默认的 TOAST 阈值尚未更改。

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

E.9.3.1.10. 预写日志(WAL)

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

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

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

无需复制此类文件。

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

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

E.9.3.3. Util 命令

当默认值为常数时启用。

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

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

这类似于VACUUM支持的语法。

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

E.9.3.4. 资料类型

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

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

E.9.3.5. Functions

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

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

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

E.9.3.6. 服务器端语言

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

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

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

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

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

E.9.3.7. Client 端接口

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

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

通过-C启用此模式。

E.9.3.8. Client 应用

E.9.3.8.1. psql

具体来说,新变量是ERRORSQLSTATEROW_COUNTLAST_ERROR_MESSAGELAST_ERROR_SQLSTATE

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

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

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

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

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

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

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

E.9.3.8.2. pgbench

E.9.3.9. 服务器应用

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

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

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

E.9.3.9.1. pg_dump,pg_dumpall,pg_restore

pg_dump 已经有了这个选项。

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

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

E.9.3.10. 源代码

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

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

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

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

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

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

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

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

E.9.3.11. 附加模块

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

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

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

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

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

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

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
上一章 首页 下一章