为什么要升级PostgreSQL?

2020-08-18 02:28:19

以前,可以在使用WITH OID创建表的过程中指定通常不可见的oid列;该功能已被删除。列仍然可以显式声明为OID类型。对具有使用WITH OID创建的列的表的操作将需要调整。

以前具有隐藏的OID列的系统目录现在具有普通的OID列。因此,SELECT*现在将输出这些列,而以前只有在显式选择的情况下才会显示它们。

不再使用,如果该文件存在,服务器将不会启动。恢复。现在使用信号和文件切换到非主模式。该设置已重命名为PROPROSE_TRIGGER_FILE。该设置已被删除。

具体而言,仅允许RECOVERY_TARGET、RECOVERY_TARGET_LSN、RECOVERY_TARGET_NAME、RECOVERY_TARGET_TIME和RECO。以前,可以指定这些参数的多个不同实例,并支持最后一个实例。现在,只能指定一个,尽管可以多次指定同一个,并且支持最后一个规范。

与以前的版本相比,这可能会产生更准确但略有不同的结果。值得注意的是,涉及NaN、下溢、溢出和被零除的情况比以前处理得更一致。

通过使用输出实数和双精度值的新算法来提高性能(安德鲁·吉尔斯)。

以前,默认情况下,显示的浮点值四舍五入为6位(实数)或15位(双精度),由EXTRA_FLOAT_DIGITS的值进行调整。现在,只要大于零(就像现在默认的那样),就只输出保存精确二进制值所需的最小位数。当设置为零或更小时,行为与之前相同。

此外,浮点指数的格式现在跨平台是统一的:除非需要三位,否则使用两位。在以前的版本中,Windows内部版本始终打印三位数。

在使用特定种子值调用setSeed()之后生成的随机()值序列现在可能与以前不同。然而,它也将是可重复的,这是以前不能保证的,因为来自服务器内部随机数的其他使用的干扰。SQL Random()函数现在拥有自己的私有每个会话状态,以防止出现这种情况。

在模式可以多种方式匹配的情况下,现在会将初始子模式视为匹配尽可能少的文本,而不是匹配最多的文本;例如,像%#";aa*#";%这样的模式现在从输入中选择第一组,而不是最后一组。

在某些情况下,这些函数会在节点集值中插入额外的空格(换行符和/或空格)。这是不可取的,因为根据用法的不同,可能会认为空格在语义上很重要。

在中,需要指定-f-将转储内容发送到标准输出(Euler Taveira)。

以前,如果没有指定目的地,默认情况下会发生这种情况,但这被认为是不友好的。

例如,以前,\pset format a选择了对齐;现在它将失败,因为这也可能意味着asciidoc。

在新的btree索引中,最大索引条目长度减少了8个字节,以改进对重复条目的处理(Peter Geoghegan)。

这意味着对以前版本中的索引pg_upgrade d执行的操作可能会失败。

如果没有提供参数列表并且有多个匹配对象,则导致DROP IF EXISTS函数/过程/聚合/例程生成错误(David Rowley)。

将目录拆分为两个目录,并添加其视图(Dean Rasheed、Tomas Vondra)。

默认情况下将类型名称的表列标记为具有“C”排序规则(Tom Lane、Daniel Vérité)。

数据类型名称的比较运算符现在可以使用任何排序规则,而不是始终使用“C”排序规则。为了保留以前的查询语义,NAME类型的列现在被显式标记为具有“C”排序规则。这样做的一个副作用是,NAME列上的正则表达式操作符现在默认情况下将使用“C”排序规则,而不是数据库排序规则,以确定依赖于区域设置的正则表达式模式的行为(例如\w)。如果希望名称列上的正则表达式具有非C行为,请附加显式COLLATE子句。(对于用户定义的NAME列,另一种可能是在创建表时指定不同的排序规则;但这只是将不向后兼容性移动到比较运算符处。)。

将视图中的对象名称列视为名称类型,而不是varchar类型(Tom Lane)。

根据SQL标准,视图中的对象名称列被声明为域类型SQL_IDENTIFIER。在中,基础目录列实际上是NAME类型。此更改使sql_Identifier成为名称之上的域,而不是像以前那样是varchar。这消除了比较和排序行为中的语义不匹配,这可以极大地提高对限制对象名列的视图的查询性能。然而,请注意,例如,不平等限制。

现在默认情况下将使用“C”区域设置比较语义,而不是像以前一样使用数据库的默认排序规则。对这些列的排序也将遵循“C”排序规则。可以通过添加COLLATE";DEFAULT&34;子句强制执行前面的行为(和低效)。

在以前的版本中,对连接参数CONNECT_TIMEOUT、Keepalives、Keepalives_Count、Keepalives_IDLE、Keepalives_Interval和port使用错误的整数值会导致libpq忽略这些值或失败,并显示错误的错误消息。

提高分区表上多个操作的性能(Amit Langote、David Rowley、Tom Lane、Allvaro Herrera)。

允许只影响少量分区的操作有效地处理具有数千个子分区的表。

此类表达式在创建分区表时求值。以前,只允许将简单常量作为分区边界。

允许CREATE TABLE';分区表的表空间规范影响其子表的表空间(大卫·罗利、阿尔瓦罗·赫雷拉)。

新函数PG_PARTITION_ROOT()返回分区树的最顶层父级,PG_PARTITION_ANASHORS()报告分区的所有祖先,而PG_PARTITION_TREE()显示有关分区的信息。

改进分区表的psql\d和\z显示(Pavel Stehule、Michaël Paquier、Allvaro Herrera)。

修复可能导致ALTER TABLE DETACH PARTITION留下不正确的依赖状态、允许后续操作行为不正常的错误,例如,通过在删除表时不删除以前的分区子索引(Tom Lane)。

提高具有多个重复项的btree索引的性能和空间利用率(Peter Geoghegan,Heikki Linnakangas)

以前,重复的索引项无序存储在其重复组中。这会造成索引插入期间的开销,由于页面拆分过多而浪费空间,并且降低了Vacuum回收整个页面的能力。重复的索引项现在按堆存储顺序排序。

内部页和最小/最大叶页指示符现在只存储更改键之前的索引键,而不是所有索引键。这也提高了索引访问的局部性。

添加对SP-GIST索引的最近邻(KNN)搜索的支持(Nikita Glukhov、Alexander Korotkov、Vlad Sterzhanov)。

减少GIST、GIN和SP-GIST索引创建的Wal写入开销(Anastasia Lubennikova、Andrey V.Lepikhov)。

提高GIST指数真空扫描的性能(Andrey Borodin、Konstantin Kuznetsov、Heikki Linnakangas)。

这改进了测试多个列的查询的优化,需要估计几个WHERE子句的组合效果。如果列相关且分布不均匀,则多列统计信息将允许更好的估计。

允许将公用表表达式(CTE)内联到外部查询(Andreas Karlsson、Andrew Gierth、David Fetter、Tom Lane)。

具体地说,如果CTE没有副作用、不是递归的并且在查询中只被引用一次,则会自动内联CTE。可以通过指定MATERIALIZED来防止内联,或者通过指定NOT MATERIALIZED来强制多重引用的CTE进行内联。以前,CTE从不内联,总是在查询的其余部分之前计算。

改进分区和联合只有一个子级的所有查询的优化(David Rowley)。

提高优化器验证具有IS NOT NULL条件的部分索引在查询中是否可用的能力(汤姆·莱恩、詹姆斯·科尔曼)。

现在可以在调用查询涉及强制转换或大型x IN(数组)子句的更多情况下识别可用性。

以前,数据库的默认排序规则用于所有统计数据。这可能会为具有非默认排序规则的列提供更好的优化器行为。

这允许进行一些以前在存在安全屏障视图或行级安全性时不会应用的优化。

如果服务器构建时支持实时(JIT)编译,则默认情况下启用它(Andres Freund)。

请注意,默认情况下不会构建此支持,但必须在配置构建时显式选择此支持。

这对于只需要检查烤面包字段的初始部分的例程很有用。

当表的列约束可以被识别为不允许使用空值时,可以对此进行优化。

允许更改表...。设置在TIMESTAMP和TIMESTAMPTZ之间更改数据类型,以避免在会话时区为UTC(Noah Misch)时重写表格。

新列是CLIENT_SERIAL和ISSUER_DN。为清楚起见,列clientdn已重命名为client_dn。

如果新连接立即关闭,则防止记录“不完整的启动数据包”(Tom Lane)。

使收银机将其应用程序名称设置为群集名称(如果已设置)(彼得·艾森特劳特)。

此功能允许在使用GSSAPI身份验证时加密TCP/IP连接,而不必设置单独的加密工具(如SSL)。为此,在中添加hostgssenc和hostnogssenc记录类型,以选择使用或不使用GSSAPI加密的连接,与现有的hostssl和hostnossl记录类型相对应。还有一个新的gssencmode libpq选项和一个pg_stat_gssani系统视图。

允许clientcert选项检查数据库用户名是否与客户端证书的通用名称匹配(Julian Markwort、Marius Timmer)。

这就避免了指定ldapserver的要求。仅当使用编译时才支持。

例如,即使是整数参数,现在也允许设置work_mem=';30.1 GB';。在任何必需的单位转换后,该值将四舍五入为整数。

添加服务器参数SSL_LIBRARY以报告服务器使用的SSL库版本(Peter Eisentraut)。

添加服务器参数SHARED_MEMORY_TYPE以控制要使用的共享内存类型(Andres Freund)。

添加并发选项以允许在不锁定写入的情况下重建索引(Michaël Paquier、Andreas Karlsson、Peter Eisentraut)。

生成的列的内容是通过表达式(包括对同一表中其他列的引用)计算出来的,而不是由INSERT或UPDATE命令指定的。

添加要从中复制的WHERE子句以控制接受哪些行(Surafel Temesgen)。

前情提要,更改类型...。无法在事务块中调用Add Value,除非它是创建枚举类型的同一事务的一部分。现在,只要在提交新枚举值之前不引用新枚举值,就可以在以后的事务中调用它。

添加和创建表格选项以防止Vacuum截断尾随空页(Takayuki Tsunakawa)

这些选项是和。使用这些选项可以降低Vacuum的锁定要求,但可以防止将磁盘空间返回给操作系统。

此更改添加了Vacuum命令选项INDEX_CLEANUP以及表存储选项VACUUM_INDEX_CLEANUP。使用此选项会降低回收空间的能力,并可能导致索引膨胀,但当主要目标是冻结旧的元组时,它会很有帮助。

添加跳过真空和分析对不能立即锁定的表的操作的功能(Nathan Bossart)。

防止、吸尘和分析请求锁定用户没有权限的表(Michaël Paquier)。

现在支持修改目录重新选项和自动真空设置。(仍需要设置ALLOW_SYSTEM_TABLE_MODS。)。

选择外键的默认约束名称时使用所有键列名称(Peter Eisentraut)。

以前,约束名称中只包含第一个列名,导致多列外键不明确。

这将向全文搜索添加对阿拉伯语、印度尼西亚语、爱尔兰语、立陶宛语、尼泊尔语和泰米尔语的词干支持。

允许为不按位相等的字符串创建报告字符串相等的归类(Peter Eisentraut)。

此功能支持可以定义与大小写和重音无关的相等比较的“非确定性”排序规则。因此,例如,可以比以前更容易地对文本列进行不区分大小写的唯一性约束。仅ICU排序规则支持此功能。

这允许在所有ICU版本之间以一致的方式自定义排序规则。

允许更无缝地将数据类型名称与其他文本类型进行比较(Tom Lane)。

类型名称现在的行为非常类似于具有默认排序规则“C”的类型文本上的域。这允许更高效地处理跨类型比较。

添加对SQL/JSON路径语言(Nikita Glukhov、Teodor Sigaev、Alexander Korotkov、Oleg Bartunov、Liudmila Mantrova)的支持。

通过使用更精确的算法提高像VARIANCE()这样的统计聚集的准确性(Dean Rasheed)。

允许date_trunc()具有控制时区的附加参数(Vik Fearing,Tom Lane)

调整TO_TIMESTAMP()/TO_DATE()函数以更好地容忍模板不匹配(ArturZakirov、Alexander Korotkov、Liudmila Mantrova)。

具体地说,在XMLTABLE、XPath()和xmlExistes()中,修复了一些节点没有输出任何内容、抛出意外错误或省略必要的XML特殊字符转义的情况。

此SQL标准子句在';的实现中没有影响,但它被不必要地拒绝了。

防止CURRENT_SCHEMA()和CURRENT_SCHEMA()由并行工作进程运行,因为它们不是并行安全的(Michaël Paquier)。

允许RECORD和RECORD[]用作声明为返回RECORD的表函数的查询列定义列表中的列类型(Elvis Pranskevichus)。

允许在同一PL/pgSQL函数中使用与这些命令同名的SQL命令和变量(Tom Lane)。

例如,允许调用COMMENT SQL命令的函数中存在调用的变量。以前,这种组合会导致解析错误。

允许libpq(从而允许psql)在错误消息中仅报告SQLSTATE值(Didier Gautheron)

添加libpq函数PQresult tMemorySize()以报告查询结果使用的内存(Lars Kanis,Tom Lane)。

这允许ECPG客户端直接与ByTEA数据交互,而不是使用编码形式。

这是通过将环境变量PG_COLOR设置为ALWAYS或AUTO来启用的。可以通过设置环境变量PG_COLLES,对颜色使用ANSI转义代码来调整所使用的特定颜色。例如,默认行为等同于PG_COLORS=";error=01;31:warning=01;35:locus=01";.。

在psql';s\help输出中显示SQL命令的手册页URL(Peter Eisentraut)。

改进CREATE TABLE、CREATE TRIGGER、CREATE EVENT TRIGGER、ANALYS、EXPLAIN、VACUUM、ALTER TABLE、ALTER INDEX、ALTER DATABASE和ALTER INDEX ALTER COLUMN(Dagfinn Ilmari Manns akker、Tatsuro Yamada、Michaël Paquier、Tom Lane、。

允许将查询生成的值赋给pgbench变量(Fabien Coelho,álvaro Herrera)。

这可以防止在调用pg_ctl的shell脚本稍后中断时关闭服务器。

Clone选项具有--link的优势,同时防止在新群集启动后更改旧群集。

当pg_dump使用INSERT命令而不是COPY发出数据时,允许在每个INSERT中包含多个数据行(苏拉菲尔·特梅斯根、大卫·罗利)。

将并行PG_DUMP中的操作顺序与后续并行PG_RESTORE使用的顺序分离(Tom Lane)。

这允许pg_restore执行更完全并行化的并行恢复,特别是在原始转储未并行完成的情况下。并行pg_dump的调度也得到了一定程度的改进。

这主要用于生成在不同源服务器版本之间完全可比较的转储。不建议正常使用,因为在恢复转储时可能会导致精度损失。

添加创建新表格类型的命令(Andres Freund、Haribabu Kommi、Arlvaro Herrera、Alexander Korotkov、Dmitry Dolgov)。

这支持开发新的表访问方法,可以针对不同的用例优化存储。现有的堆访问方法仍然是默认方法。

添加计划器支持函数接口,以改进函数的优化器估计、内联和索引(Tom Lane)。

这允许扩展创建计划器支持函数,这些函数可以提供特定于函数的选择性、成本和行数估计,这些估计可以依赖于函数的参数。支持函数还可以提供简化的表示和索引条件,极大地扩展了优化的可能性。

简化手动分配的OID的重新编号,并建立用于管理此类OID的新项目策略(约翰·内勒、汤姆·莱恩)。

手动为新内置对象(如新函数)分配OID的补丁现在应该随机选择8000-9999范围内的OID。在开发周期结束时,使用新的renumber_oids.pl脚本,提交的修补程序使用的OID将被重新编号为更小的数字,当前在4xxx范围内。这种方法应该会极大地降低不同进程中补丁之间发生OID冲突的几率。

虽然没有特定的策略保留任何OID供外部使用,但建议需要私有手动分配OID的forks和其他项目使用7xxx范围内的高数字。这将避免与最近合并的补丁发生冲突,核心项目达到该范围应该需要很长时间。

Printf系列函数以及strerror和strerror_r现在在Postgres代码内跨平台统一运行(Tom Lane)。

值得注意的是,printf到处都能理解%m;在Windows上,strerror可以处理Winsock错误代码(它通常在后端代码中这样做,而不是在前端代码中);并且strerror_r总是遵循GNU返回约定。

这只会影响Make Dist过程中生成的文件和很少使用的纯文本输出文件。Pandoc产生比lynx更好的输出,并且避免了一些区域设置/编码问题。需要Pandoc版本1.13或更高版本。

允许在更多情况下将ORDER BY SORTS和LIMIT子句推送到postgres_fdw外部服务器(Etsuro Fujita)。

虽然postgres_fdw表上的检查选项被忽略(因为引用是外来的),但此类表上的视图被视为本地视图,因此此更改会强制对它们执行检查选项。以前,只有INSERT和UP

.