主要是列举了与之前版本的不兼容性。
删除oid列的特殊行为。
以前,oid可以在创建表的过程中使用WITH OIDS;来指定通常不可见的列。该能力已被删除。列仍然可以显式声明为type oid。使用创建的列的表上的操作WITH OIDS将需要进行调整。
以前具有隐藏oid列的系统目录现在具有普通oid列。因此,SELECT *现在将输出这些列,而以前,只有明确选择时才会显示它们。
删除数据类型abstime,reltime和tinterval。
这些已被SQL标准类型(例如:淘汰timestamp)。
删除timetravel扩展名。
将recovery.conf设置移至uxdb.conf。
recovery.conf不再使用,并且如果该文件存在,服务器将不会启动。recovery.signal和standby.signal文件现在用于切换到非主要模式。该trigger_file设置已重命名为promove_trigger_file。该standby_mode设置已被删除。
不允许有多个冲突recovery_target*规范。
具体来说,仅允许使用recovery_target,recovery_target_lsn,recovery_target_name,recovery_target_time和recovery_target_xid之一。以前,可以指定这些参数的多个不同实例,而最后一个则受到尊重。现在,只能指定一个,尽管可以多次指定一个,并且遵循最后一个规范。
默认情况下,导致恢复前进到最新时间线。
具体来说,recovery_target_timeline现在默认为latest。以前,它默认为current。
几何函数和运算符的代码重构。
与以前的版本相比,这可能会导致结果更准确,但略有不同。值得注意的是,涉及NaN,下溢,溢出和被零除的情况比以前处理得更加一致。
通过使用新算法输出real和double precision值来提高性能。
以前,显示的浮点值默认情况下会四舍五入为6(对于real)或15(对于double precision)数字,并通过extra_float_digits的值进行调整。现在,只要extra_float_digits大于零(默认情况下现在为零),就只输出保留精确的二进制值所需的最小位数。extra_float_digits设置为零或更小时,行为与以前相同。
另外,现在跨平台的浮点指数格式是统一的:使用两位数字,除非需要三位数字。在以前的版本中,Windows构建始终打印三位数字。
random()和setseed()现在在各个平台上表现一致。
带有特定种子值random()的setseed()调用之后生成的值序列现在可能与以前有所不同。但是,它也是可重复的,由于服务器内部其他用途的随机数的干扰,以前无法保证。SQL random()函数现在具有其自己的按会话的私有状态,以防止出现这种情况。
更改SQL样式substring()以具有符合标准的贪婪行为。
如果可以以多种方式匹配模式,则现在将初始子模式视为匹配尽可能少的文本而不是最大的文本;例如,%#"aa*#"%现在这样的模式a从输入中选择第一组的,而不是最后一组。
不要漂亮地打印xpath()或XMLTABLE构造的结果。
在某些情况下,这些函数会在节点集值中插入额外的空格(换行符和/或空格)。这是不希望的,因为根据使用情况,空白可能在语义上被认为是重要的。
将命令行工具ux_verify_checksums重命名为ux_checksums。
在ux_restore中,要求-f指定将转储内容发送到标准输出。
以前,如果没有指定目的地,默认情况下会发生这种情况,但这被认为是不友好的。
在uxsql的pset format命令中禁止非唯一缩写。
例如,以前pset format为a chose aligned; 现在它将失败,因为这同样意味着asciidoc。
在新的btree索引中,最大索引条目长度减少了八个字节,以改善重复条目的处理。
这意味着对先前版本的索引ux_upgrade的REINDEX操作可能会失败。
原因DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE以产生一个错误,如果未提供参数列表和有多个匹配对象。
在这种情况下还可以改善错误消息。
将ux_statistic_ext目录分为两个目录,并添加ux_stats_ext它的视图。
此更改支持向非特权用户隐藏潜在敏感的统计数据。
删除过时的ux_attrdef.adsrc列。
此列已被弃用很长时间,因为它没有响应其他目录更改(例如列重命名)而更新。从中获取检查约束表达式的文本版本的推荐方法ux_constraint是ux_get_expr(conbin, conrelid)。ux_get_constraintdef()也是一个有用的选择
默认情况下,将名称类型的表列标记为具有“ C ”排序规则。
数据类型的比较运算符name现在可以使用任何排序规则,而不是始终使用“ C ”排序规则。为了保留查询的先前语义,name现在将类型为type的列显式标记为具有“ C ”排序规则。这样做的副作用是,默认情况下,name列上的正则表达式运算符现在将默认使用“ C ”排序规则(而不是数据库排序规则)来确定与语言环境相关的正则表达式模式(例如\w)的行为。如果您希望name列的正则表达式具有非C行为,请附加一个显式COLLATE子句。(对于用户定义name列,另一种可能性是在创建表时指定不同的排序规则;但这只会将非向后兼容性移至比较运算符。)
将information_schema视图中的对象名称列视为类型name,而不是varchar。
根据SQL标准,information_schema视图中的对象名称列声明为域类型sql_identifier。在UXDBSQL中,基础目录列实际上是类型name。此更改使sql_identifier成为的域name,而不是varchar以前。这消除了比较和排序行为中的语义不匹配,从而可以大大提高对information_schema限制对象名列的视图的查询性能。但是请注意,例如,不平等限制
SELECT ... FROM information_schema.tables where table_name < 'foo';
现在将默认使用“ C ”-语言环境比较语义,而不是像以前那样使用数据库的默认排序规则。在这些列上的排序也将遵循“ C ”的排序规则。可以通过添加一个COLLATE "default"子句来强制执行以前的行为(和效率低下)。
删除禁用动态共享内存的功能。
具体来说,dynamic_shared_memory_type不能再设置为none。
更严格地解析libpq整数连接参数。
在以前的版本,使用用于连接参数不正确的整数值connect_timeout,keepalives,keepalives_count,keepalives_idle,keepalives_interval和port导致的libpq要么忽略那些值或使用不正确的错误消息失败。
使ux_dump转储数据库的属性,而不仅仅是其内容。
以前,数据库本身的属性(例如数据库级别GRANT/ REVOKE权限和ALTER DATABASE SET变量设置)仅由ux_dumpall转储。现在ux_dump --create,ux_restore --create除了数据库中的对象之外,还将还原这些数据库属性。ux_dumpall -g现在仅转储与角色和表空间相关的属性。ux_dumpall的完整输出(不带-g)保持不变。
ux_dump和ux_restore,不带--create,不再转储/恢复数据库级注释和安全标签;这些现在被视为数据库的属性。
ux_dumpall的输出脚本现在将始终使用原始语言环境和编码来创建数据库,因此,如果目标系统不知道该语言环境或编码名称,则该脚本将失败。以前,CREATE DATABASE如果数据库的语言环境和编码与旧集群的默认值匹配,则将在没有这些规范的情况下被发出。
ux_dumpall --clean现在可以恢复uxdb和template1数据库的原始区域设置和编码设置,以及用户创建的数据库的区域设置和编码设置。
在对函数和列引用进行歧义消除时,请考虑语法形式。
当x是表名或复合列时,UXDB传统上认为语法形式f(x)和x.f是等价的,允许使用一些技巧,比如编写一个函数,然后使用它,就像它是一个按需计算的列一样。 但是,如果两种解释都可行,则始终选择列解释,如果用户希望解释函数,则会导致令人惊讶的结果。现在,如果有歧义,就选择与句法形式相匹配的解释。
完全实施表和域约束名称的唯一性。
UXDB期望表约束的名称是不同的,同样,对于域约束的名称也是如此。但是,对此并没有严格执行,并且以前存在一些可以创建重复名称的特殊情况。
根据POSIX标准,使power(numeric, numeric)和power(float8, float8)处理NaN输入。
根据Posix,NaN ^ 0 = 1和1 ^ NaN = 1,但是所有其他使用 NaN 输入的情况都应该返回 NaN。power(numeric、 numeric)刚刚在所有这些情况下返回了NaN; 现在它尊重两个异常。power (float8,float8)遵循标准,如果c库遵循标准的话; 但是在一些老的Unix平台上,该库不遵循标准,而且在一些 Windows 版本上也存在问题。
当模板分隔符不匹配时,防止to_ number()消耗字符。
具体来说,SELECT to_number('1234', '9,999')用于返回134。现在它将返回1234。L而TH现在只消耗不是数字,正/负号,小数点或逗号字符。
修复to_date(),to_number()和to_timestamp()跳过每个模板字符的字符。
以前,每个模板字符跳过一个字节,如果其中一个字符串包含多字节字符,就会产生奇怪的行为。
调整模板字符串中双引号内的反斜杠的处理,分别为to_char(),to_number()和to_timestamp()。
现在,这样的反斜杠会将字符后的字符转义,特别是双引号或其他反斜杠。
正确处理xmltable()、xpath()和其他xml处理函数中的相对路径表达式。
根据SQL标准,相对路径从 XML 输入文档的文档节点开始,而不是像以前的函数那样从根节点开始。
在扩展查询协议中,statement_timeout将其分别应用于每个Execute消息,而不是应用于同步之前的所有命令。
从系统目录ux_class中删除relhaspkey列。
需要检查主键的应用程序应该参考ux_index。
用prokind替换系统目录ux_proc的proisagg和proiswindow列。
这个新列更清楚地区分了函数、过程、聚合和窗口函数。
正确的信息模式列tables.table_type返回 FOREIGN而不是FOREIGN TABLE。
这个新输出符合SQL标准。
更改后台工作者的ps进程显示标签,以匹配ux_stat_activity.backend_type标签。
导致在打开大对象的过程中进行大对象权限检查lo_open(),而不是在尝试进行读取或写入时发生。
如果请求写访问权限且该写访问权限不可用,则即使从不写入大对象,现在也会引发错误。
防止非超级用户重新索引共享目录。
以前,也允许数据库所有者执行此操作,但是现在,数据库所有者被认为超出了他们的权限范围。
删除不推荐使用的adminpack功能ux_file_read(),ux_file_length()和ux_logfile_rotate()。
核心后端现在提供了等效的功能。 现有的adminpack安装将继续访问这些函数,直到它们通过ALTE REXTENSION... UPDATE进行更新。
尊重双引号命令选项的大小写。
以前,即使使用双引号输入,某些SQL命令中的选项名称也被强制小写。因此,例如"FillFactor",尽管名称正确为小写字母,但仍可以作为索引存储选项。现在,此类情况将产生错误。
删除服务器参数replacement_sort_tuple。
确定替换种类不再有用。
删除CREATE FUNCTION中的WITH子句。
长期以来,UXDB一直支持更符合标准的语法。
在PL/UXSQL触发函数中,当未分配时,OLD和NEW变量现在读为NULL。
以前,可以解析但不执行对这些变量的引用。