1.2.?不兼容性

主要是列举了与之前版本的不兼容性。

  1. 删除oid列的特殊行为。

    以前,oid可以在创建表的过程中使用WITH OIDS;来指定通常不可见的列。该能力已被删除。列仍然可以显式声明为type oid。使用创建的列的表上的操作WITH OIDS将需要进行调整。

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

  2. 删除数据类型abstime,reltime和tinterval。

    这些已被SQL标准类型(例如:淘汰timestamp)。

  3. 删除timetravel扩展名。

  4. 将recovery.conf设置移至uxdb.conf。

    recovery.conf不再使用,并且如果该文件存在,服务器将不会启动。recovery.signal和standby.signal文件现在用于切换到非主要模式。该trigger_file设置已重命名为promove_trigger_file。该standby_mode设置已被删除。

  5. 不允许有多个冲突recovery_target*规范。

    具体来说,仅允许使用recovery_target,recovery_target_lsn,recovery_target_name,recovery_target_time和recovery_target_xid之一。以前,可以指定这些参数的多个不同实例,而最后一个则受到尊重。现在,只能指定一个,尽管可以多次指定一个,并且遵循最后一个规范。

  6. 默认情况下,导致恢复前进到最新时间线。

    具体来说,recovery_target_timeline现在默认为latest。以前,它默认为current。

  7. 几何函数和运算符的代码重构。

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

  8. 通过使用新算法输出real和double precision值来提高性能。

    以前,显示的浮点值默认情况下会四舍五入为6(对于real)或15(对于double precision)数字,并通过extra_float_digits的值进行调整。现在,只要extra_float_digits大于零(默认情况下现在为零),就只输出保留精确的二进制值所需的最小位数。extra_float_digits设置为零或更小时,行为与以前相同。

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

  9. random()和setseed()现在在各个平台上表现一致。

    带有特定种子值random()的setseed()调用之后生成的值序列现在可能与以前有所不同。但是,它也是可重复的,由于服务器内部其他用途的随机数的干扰,以前无法保证。SQL random()函数现在具有其自己的按会话的私有状态,以防止出现这种情况。

  10. 更改SQL样式substring()以具有符合标准的贪婪行为。

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

  11. 不要漂亮地打印xpath()或XMLTABLE构造的结果。

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

  12. 将命令行工具ux_verify_checksums重命名为ux_checksums。

  13. 在ux_restore中,要求-f指定将转储内容发送到标准输出。

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

  14. 在uxsql的pset format命令中禁止非唯一缩写。

    例如,以前pset format为a chose aligned; 现在它将失败,因为这同样意味着asciidoc。

  15. 在新的btree索引中,最大索引条目长度减少了八个字节,以改善重复条目的处理。

    这意味着对先前版本的索引ux_upgrade的REINDEX操作可能会失败。

  16. 原因DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE以产生一个错误,如果未提供参数列表和有多个匹配对象。

    在这种情况下还可以改善错误消息。

  17. 将ux_statistic_ext目录分为两个目录,并添加ux_stats_ext它的视图。

    此更改支持向非特权用户隐藏潜在敏感的统计数据。

  18. 删除过时的ux_attrdef.adsrc列。

    此列已被弃用很长时间,因为它没有响应其他目录更改(例如列重命名)而更新。从中获取检查约束表达式的文本版本的推荐方法ux_constraint是ux_get_expr(conbin, conrelid)。ux_get_constraintdef()也是一个有用的选择

  19. 默认情况下,将名称类型的表列标记为具有“ C ”排序规则。

    数据类型的比较运算符name现在可以使用任何排序规则,而不是始终使用“ C ”排序规则。为了保留查询的先前语义,name现在将类型为type的列显式标记为具有“ C ”排序规则。这样做的副作用是,默认情况下,name列上的正则表达式运算符现在将默认使用“ C ”排序规则(而不是数据库排序规则)来确定与语言环境相关的正则表达式模式(例如\w)的行为。如果您希望name列的正则表达式具有非C行为,请附加一个显式COLLATE子句。(对于用户定义name列,另一种可能性是在创建表时指定不同的排序规则;但这只会将非向后兼容性移至比较运算符。)

  20. 将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"子句来强制执行以前的行为(和效率低下)。

  21. 删除禁用动态共享内存的功能。

    具体来说,dynamic_shared_memory_type不能再设置为none。

  22. 更严格地解析libpq整数连接参数。

    在以前的版本,使用用于连接参数不正确的整数值connect_timeout,keepalives,keepalives_count,keepalives_idle,keepalives_interval和port导致的libpq要么忽略那些值或使用不正确的错误消息失败。

  23. 使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数据库的原始区域设置和编码设置,以及用户创建的数据库的区域设置和编码设置。

  24. 在对函数和列引用进行歧义消除时,请考虑语法形式。

    当x是表名或复合列时,UXDB传统上认为语法形式f(x)和x.f是等价的,允许使用一些技巧,比如编写一个函数,然后使用它,就像它是一个按需计算的列一样。 但是,如果两种解释都可行,则始终选择列解释,如果用户希望解释函数,则会导致令人惊讶的结果。现在,如果有歧义,就选择与句法形式相匹配的解释。

  25. 完全实施表和域约束名称的唯一性。

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

  26. 根据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 版本上也存在问题。

  27. 当模板分隔符不匹配时,防止to_ number()消耗字符。

    具体来说,SELECT to_number('1234', '9,999')用于返回134。现在它将返回1234。L而TH现在只消耗不是数字,正/负号,小数点或逗号字符。

  28. 修复to_date(),to_number()和to_timestamp()跳过每个模板字符的字符。

    以前,每个模板字符跳过一个字节,如果其中一个字符串包含多字节字符,就会产生奇怪的行为。

  29. 调整模板字符串中双引号内的反斜杠的处理,分别为to_char(),to_number()和to_timestamp()。

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

  30. 正确处理xmltable()、xpath()和其他xml处理函数中的相对路径表达式。

    根据SQL标准,相对路径从 XML 输入文档的文档节点开始,而不是像以前的函数那样从根节点开始。

  31. 在扩展查询协议中,statement_timeout将其分别应用于每个Execute消息,而不是应用于同步之前的所有命令。

  32. 从系统目录ux_class中删除relhaspkey列。

    需要检查主键的应用程序应该参考ux_index。

  33. 用prokind替换系统目录ux_proc的proisagg和proiswindow列。

    这个新列更清楚地区分了函数、过程、聚合和窗口函数。

  34. 正确的信息模式列tables.table_type返回 FOREIGN而不是FOREIGN TABLE。

    这个新输出符合SQL标准。

  35. 更改后台工作者的ps进程显示标签,以匹配ux_stat_activity.backend_type标签。

  36. 导致在打开大对象的过程中进行大对象权限检查lo_open(),而不是在尝试进行读取或写入时发生。

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

  37. 防止非超级用户重新索引共享目录。

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

  38. 删除不推荐使用的adminpack功能ux_file_read(),ux_file_length()和ux_logfile_rotate()。

    核心后端现在提供了等效的功能。 现有的adminpack安装将继续访问这些函数,直到它们通过ALTE REXTENSION... UPDATE进行更新。

  39. 尊重双引号命令选项的大小写。

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

  40. 删除服务器参数replacement_sort_tuple。

    确定替换种类不再有用。

  41. 删除CREATE FUNCTION中的WITH子句。

    长期以来,UXDB一直支持更符合标准的语法。

  42. 在PL/UXSQL触发函数中,当未分配时,OLD和NEW变量现在读为NULL。

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

XML 地图 | Sitemap 地图