Release Notes

v2.1.2.4A

改进点

兼容性

兼容MySQL功能

  1. 兼容mysql的MAKE_SET (bits,str1,str2,...)函数,用于根据给定的位标志和字符串列表返回一个字符串集合。

  2. 兼容mysql的INSERT(str,pos,len,newstr)函数,函数将字符串str中pos位置开始长度为len的字符串替换为newstr。

  3. 兼容mysql的weekday函数,返回输入参数的日期对应的星期数索引值。

  4. 兼容mysql支持CREATE TABLE ... LIKE Statement,根据另一个表的定义创建一个空表,包括原始表中定义的任何列属性和索引。

  5. 兼容mysql前置后置一个或多个!的逻辑操作用法;

  6. 兼容mysql的find_in_set函数新增支持set类型;

  7. 兼容mysql支持insert ... set ... on duplicate key update

  8. 兼容mysql支持delete ... joinDELETE语句中使用JOIN子句来从表中删除和另一个表中的匹配的行记录;

  9. 兼容mysql的lcase/lower,ucase/upper函数,根据当前字符集映射返回所有字符的小写/大写;

  10. 兼容mysql支持mysql的database()函数,以一个字符串的形式返回在utf8字符集支持下的当前(默认)数据库名;

  11. 兼容mysql的SHOW VARIABLES语句,显示系统变量及其值;

  12. 兼容mysql的MID()函数,用于返回一个字符串中从指定位置开始的指定长度的子字符串;

  13. 兼容mysql的ATAN()函数,用于返回一个或两个数字的反正切;

  14. 兼容mysql的TRUNCATE()函数,将给定数字,按一定的规则进行截断处理。

兼容Oracle功能

  1. Oracle支持force语法创建视图,支持不删除视图可以直接修改基表;

  2. 兼容Oracle支持UID语法,返回一个唯一标识会话用户的整数ID;

  3. 兼容支持Oracle的WM_CONCAT函数,可以将一列数据连接成一个字符串,并且在每个值之间插入分隔符;

  4. 兼容Oracle存储过程支持COMMIT和ROLLBACK功能;

  5. 兼容Oracle的insert不带as的别名的语法;

  6. 兼容Oracle子查询支持查询rowid;

  7. 兼容支持oracle的NLS_LOWER函数、NLS_INITCAP函数及nls_upper函数;

  8. 兼容支持Oracle SYS.DUAL,用于执行一些基本的查询操作;

  9. 修复UXDB将!=- 和 !=+识别为一个操作符的问题;

  10. 兼容Oracle的raw类型,可变固定长度的二进制数据或字节字符串,将十六进制字符串转换成字节存储;

  11. 兼容oracle(+)功能,允许多次与其他表右连接;

  12. 兼容Oracle的SELECT语法支持UNIQUE关键字及sample_percent关键字;

  13. 兼容Oracle的VALIDATE_CONVERSION函数,判断是否可以将数据转换为指定的数据类型;

  14. 兼容Oracle的BIN_TO_NUM函数,将一个二进制位向量转化为十进制的数字;

  15. 兼容Oracle的ADD_DAYS函数和ADD_WEEKS函数,实现返回一个日期增加n天或n周之后的日期;

  16. 兼容Oracle的len函数,返回给定字符串表达式字符(而不是字节)个数,其中不包含尾随空格;

  17. 兼容oracle的创建及查询分区语法及功能,主要包括range分区、list分区、hash分区及组合分区,支持oracle分区表查询语法;

  18. 新增的sys模式的系统视图可以通过系统视图名访问,除了系统视图,sys模式中的其他数据库对象(如果有的话),如table等,都可以不加模式名访问;

  19. oracle兼容-创建触发器时REFERENCING OLD / REFERENCING NEW语法兼容;

  20. 兼容Oracle dbms_output中函数/过程接口和oracle dbms_output包一致;

  21. 兼容Oracle的insert错误子句 - oracle error_logging_clause

  22. 兼容Oracle可执行对象属性功能,用于控制和管理存储在数据库中的可执行对象(如存储过程、函数、触发器等。

兼容PLSQL功能

  1. 兼容oracle/plsql包接口记录类型定义和使用;

  2. 兼容Oracle plsql游标变量的赋值行为,支持对赋值语句的左右值类型校验,左右表达式都应是游标变量;如果赋值源为未打开的游标变量,则分配后打开目标cursor不会打开源游标变量;赋值成功后游标的属性应相同;

  3. 兼容Oracle plsql包接口游标类型定义及游标类型包变量;

  4. 兼容Oracle plsql using子句中兼容INOUTIN OUT关键字;

  5. 兼容oracle bulk collect功能支持,支持静态DML语句中使用BULK COLLECT INTO;支持FORALL语句和动、静态insertupdatedelete一起使用;支持SQL%BULK_ROWCOUNT

  6. 兼容Oracle plsql匿名块内置数据类型支持。

通用功能

  1. 支持数据库备份还原或copy还原数据时,实现类似merge into的方式还原插入数据;

  2. ux_upgrade工具支持插件和配置文件升级;

  3. libuxsql接口支持指定执行超时时间,同时适配repmgr;

  4. 支持适配AWR报告生成及查看。

功能限制

  1. 错误子句限制:

    • 以下情况会导致语句失败并回滚,而不调用错误日志记录功能:

      • 违法索引检查,排他约束;
      • 不支持after 触发器,语句级触发器;
      • 不支持栈溢出错误;
      • 不支持处plsql创建函数过程及系统默认提供函数外的过程异常错误捕获;
      • 不支持fdw。
    • 以下情况会无法使用错误子句:

      • 语义解析阶段出现的错误,如将字符串转为整数类型的错误;
      • 不受支持的数据类型将在语义分析阶段报错;
      • 不支持insert all 及mysql 兼容模式的on duplicate key update语法。

v2.1.2.3

改进点

兼容性

兼容MySQL功能

  1. 兼容支持MySQL的decimal数据类型。

  2. 兼容 MySQL的0x十六进制形式输入。

  3. 兼容MySQL支持casewhen语法中引用字段别名。

  4. 支持非空约束,且带自增序列的字段,插入NULL也实现自增的插入行为。

  5. 支持MySQL的replace into语法。

  6. 兼容MySQL支持interval类型(实际为关键字)。

  7. 兼容支持MySQL的CAST函数,可用来将一个任意类型的值转换为另一个类型的值。

  8. 兼容 mysql B二进制形式输入。

  9. 兼容mysql sysdate() 函数用法。

  10. 兼容mysql MONTHNAME (date)函数,支持返回日期所在月份的全名。

  11. 实现mysql兼容函数WEEKOFYEAR (date) 、DAYOFWEEK (date) 和 DAYOFYEAR (date)函数。

  12. 兼容mysql conv和OCT(N) 数值函数。

  13. 实现mysql兼容函数interval (N,N1,N2,N3,..........)函数。

  14. 兼容mysql SPACE(N) 函数,返回由N个空格组成的字符串。

  15. 兼容mysql BIN (N)函数,将数字转换成对应二进制值的字符串。

  16. mysql双竖线内核及bin工具全支持。

兼容Oracle功能

  1. 兼容oracle的物化视图自动更新,支持刷新时机为on demand,on statement,never refresh。

  2. oracle 全局临时表(Global Temporary Table)对象兼容。

  3. 单一表、索引、序列、视图、函数等对象,支持创建多个同义词。

  4. 兼容触发器:NEW,:OLD关键字。

  5. 兼容Oracle的创建序列语法。

  6. 增加object关键字,支持create type typ1 as object(id int, c1 int, c2 date)语法。

  7. 兼容支持ORACLE table()函数,用于格式化返回类型为table的函数的结果。

  8. 支持oracle的动态sql执行方式EXECUTE IMMEDIATE sql---动态语句-using子句支持。

  9. 支持oracle的动态sql执行方式EXECUTE IMMEDIATE sql---动态语句-兼容oracle占位符。

  10. 支持oracle的动态sql执行方式EXECUTE IMMEDIATE sql---动态语句-支持给匿名块传参数。

  11. 支持oracle的动态sql执行方式EXECUTE IMMEDIATE sql---在using子句中使用in out,out。

  12. 支持oracle的动态sql执行方式EXECUTE IMMEDIATE sql---动态语句-returning into子句。

  13. Oracle兼容函数sessiontimezone返回当前会话的时区。

  14. 支持interval分区功能,支持range分区与interval分区互相转换。

兼容PLSQL功能

  1. 兼容ORACLE plsql兼容异常处理。

  2. 兼容 oracle/plsql 游标类型变量---兼容 oracle/plsql 显式游标申明和定义。

  3. 兼容 oracle/plsql 游标类型变量---兼容 oracle/plsql 显式游标打开语法。

  4. 兼容oracle支持多游标变量调用显式属性功能。

  5. 支持out实际参数是包变量。

  6. 兼容支持ORACLE DBMS_LOB包。

  7. plsql 匿名块和语句块支持多重标签。

  8. 兼容 oracle/plsql 游标变量申明和定义。

  9. plsql 变量部分赋值模型---plsql 记录类型变量赋值语句部分赋值。

  10. 兼容 oracle/plsql 游标变量打开语法。

  11. 兼容 oracle/plsql 游标取数据语法。

  12. plsql 记录类型变量函数/过程 INOUT/OUT 参数部分赋值。

  13. 兼容oracle模式下,plsql子查询循环变量不需要预定义,支持index_name为rownum。

通用功能

  1. 支持repmgr日志定期分割,定期分割为一天分割一次,分割时间为每日0点;日志达到一定大小也会自动分割,大小可设置;每日一次固定分割,超出设置大小进行额外分割。

  2. 支持自定义密码安全策略的设置功能,及安全策略功能改造为通用功能。

  3. 在ux_controldata工具中增加参数表示是否安全模式集群。

  4. 支持db跨版本升级脚本(安全和通用都支持,安全从2115D开始)。

功能限制

  1. 安全模式下,只支持从2.1.1.5D之后的升级,不支持全库加密; 仅支持2114,2115C,2115D,2115E,2115F,及后续版本的升级,且升级到的版本必须是新的包。

  2. 现阶段arm平台fdw和dblink仅支持Oracle基础包19_10版本。

v2.1.2.2

改进点

  1. 数据库内核由pg12升级到pg15。

  2. 标准模式和兼容模式(mysql、Oracle2种模式)适配新内核。

  3. 安全功能适配新内核,升级后全部安全功能可用,包括三权、审计、加密功能(全库加密、审计加密、wal日志加密、表空间加密、列加密、索引加密、系统表加密、日志脱敏、秘钥管理)、强访、用户管理和策略限制。

  4. 2115F版本之前的全部功能合入2122版本。

  5. 兼容Mysql || 操作符行为。

  6. 兼容Mysql set类型兼容支持。

  7. 兼容Mysql UNHEX函数,将16进制字符串转化为二进制字符串。

  8. 兼容Mysql FROM_UNIXTIME函数支持,将Unix时间戳转换为日期时间格式。

  9. 兼容Mysql UNIX_TIMESTAMP函数支持,将日期时间格式转换为Unix时间戳。

  10. 兼容Oracle user_jobs/all_jobs/dba_jobs视图支持。

  11. 兼容Oracle 支持使用小写用户名登录,切换用户时也可以使用小写。

  12. 兼容Oracle union支持number和varchar类型。

  13. 兼容Oracle all_dependencies/dba_dependencies/user_dependencies视图支持。

  14. 兼容Oracle nclob类型支持,并支持相关函数和类型操作方法。

  15. 兼容Oracle sql语句支持集合类型(可变数组和嵌套表)。

  16. 兼容Oracle sys_guid函数兼容。

  17. 兼容Oracle N'字符串' 表示的字符串常量支持,且支持NQ连用功能。

  18. 兼容Oracle 支持oracle系统视图(all_all_tables,all_types,dba_all_tables,dba_free_space,dba_types,user_all_tables,user_free_space)。

  19. 函数的inout和out参数在函数返回时输出给变量。

  20. 把新增的语法增加到语法帮助信息,使用\h(\help)带上具体命令可查看详细的语法。

  21. 修改uxgis3.3.2,uxgis3.0.1插件支持兼容模式。

  22. 隐式转换索引支持方案调整,支持在VARCHAR2类型上使用btree索引可以和其他类型(text)进行比较查询。

  23. UXDB的默认端口由“5432”修改为“52025”。

功能限制

  1. set类型使用限制

    a. set类型根据成员数量,最大可存储UINT64范围的最大值,但是在与数字比较、计算时如果set内部数字范围超过另一数字操作数的类型范围将报错。

    b. SET类型插入数字、SET与SET数学计算时,最大支持INT8范围,超限报错。

    c. numeric类型转为SET类型时超过INT8范围报错。

    d. SET类型列现阶段不支持建立索引,不支持作主键、外键等。

    e. SET列现阶段不支持直接排序,但可强转为数字或字符类型排序。

  2. ux_dump、ux_restore备份、恢复工具不支持2115F及之前的版本。

v2.1.1.5F

改进点

  1. 兼容mysql where语句可以使用数字类型表达式。

  2. 兼容MySQL的ALTER TABLE语句中的MODIFY子句用于修改表中的列。

  3. 兼容MySQL的binary/varbinary类型。

  4. 兼容Oracle的open for 语法使用场景扩充,支持加变量。

  5. 兼容Oracle的plsql 子查询循环变量不需要预定义。

  6. 兼容Oracle的partition显式指定分区子表名查询。

  7. 兼容Oracle的keep(dense_rankfirst/last)语法功能。

  8. 兼容Oracle的plsql package 访问控制功能 accessible_by_clause。

  9. plsql 支持游标属性(SQL%ROWCOUNT/SQL%FOUND/SQL%NOTFOUND)定义和使用。

  10. plsql支持触发器条件谓词(INSERTING、UPDATING、UPDATING(‘column’)、DELETING)。

  11. 兼容Oracle的PL/SQL中,无参数函数的定义不需要使用()。

  12. 兼容Oracle的不带call调用存储过程语法。

  13. 兼容oracle DBMS_JOB包,支持定时任务创建。

  14. 兼容oracle DBMS_AQ包函数(ENQUEUE、DEQUEUE)。

  15. 兼容oracle DBMS_AQADM包函数(CREATE_QUEUE_TABLE、ALTER_QUEUE_TABLE、DROP_QUEUE_TABLE、PURGE_QUEUE_TABLE、CREATE_QUEUE、ALTER_QUEUE、DROP_QUEUE、 START_QUEUE、 STOP_QUEUE)。

  16. plsql 包变量兼容支持,支持 plsql 中对包变量读写、常规数据类型的读取及常规数据类型的赋值操作。

  17. 支持开源工具查询select version()使用版本号。

  18. encryptlicense工具添加对json文件中字段有效性检验。

  19. 初始化数据库的时候默认加载plsql扩展。

功能限制

  1. 开源工具查询版本号,只有enable_pgversion_valid参数设置为ON时,select version()获取的版本号为uxdb对应的pg版本号,否则为uxdb版本号。

v2.1.1.5E

改进点

  1. 兼容性兼容oracle的to_date函数(日期带+/-符号)。

  2. 兼容oracle的撤销与赋予表alter table权限。

  3. 兼容oracle的nchr函数。

  4. 兼容oracle的nls_upper函数。

  5. 兼容oracle的||连接符功能。

  6. 兼容oracle唯一约束和check约束启用和禁用。

  7. 兼容oracle的支持分区表创建oracle语法。

  8. 兼容oracle的Interval-Partition特性,Interval分区支持。

  9. 兼容oracle函数、存储过程建立语法支持(oracle风格)。

  10. 兼容oracle dbms_utility包函数(format_call_stack、get_time、get_hash_value)。

  11. 兼容oracle DBMS_SQL包函数(is_open、open_cursor、close_cursor、parse、 bind_variable、bind_array、define_column、define_array、execute、fetch_rows、 execute_and_fetch、last_row_count、column_value、desc_rec、describe_columns)。

  12. 兼容oracle dbms_output包函数(enable、disable、put、put_line、new_line、 get_line、get_lines)。

  13. 兼容mysql支持FIRST/AFTER关键字。

  14. 兼容mysql的bit和bool类型比较。

  15. 兼容mysql的insert...set...on duplicate key update...语法支持。

  16. 支持postgres原生的关键字适用范围(表名、列名等)。


功能限制

  1. 关键字的重命名必须符合UXDB标识符的命名规范且不能长于63个字节,超过63个字节则会截断。

  2. interval分区主表名限制最长不得超过52个字符;且interval分区只能指定单一分区键;用户定义分区不能包含default属性、不能包含MAXVALUE分区、不支持删除。

  3. 兼容Oracle分区表创建语法不支持指定hash分区。

v2.1.1.5D

改进点

兼容性

  1. 兼容mysql查看索引信息(SHOW INDEX)。

  2. 兼容mysql列信息查看(show columns)。

  3. 兼容mysql支持反单引号。

  4. 兼容mysql update\delete语句带有limit用法。

  5. 兼容mysql change语法。

  6. 兼容mysql支持关键字comment指定备注。

  7. 兼容mysql ELT()函数。

  8. 兼容mysql FIELD函数。

  9. 兼容mysql FORMAT()函数。

  10. 兼容mysql HEX()函数。

  11. 兼容mysql LOCATE()函数。

  12. 兼容mysql REGEXP语法。

  13. 兼容mysql STRCMP()函数。

  14. 兼容mysql RAND()函数。

  15. 兼容mysql CONVERT函数。

  16. 兼容mysql STR_TO_DATE函数。

  17. 兼容mysql TO_DAYS(date)、FROM_DAYS(N)函数。

  18. 兼容mysql SUBSTRING_INDEX()函数。

  19. 兼容mysql IFNULL()函数。

  20. 兼容mysql GROUP_CONCAT函数。

  21. 兼容mysql curdate()、current_date()、current_timestamp()、current_time()、curtime(fsp)、 current_timestamp(fsp)、now(fsp)函数。

  22. 兼容mysql YEAR(date)、MONTH(date)、WEEK(date[,mode])、DAY(date)、DAYOFMONTH(date)、 MINUTE(time)、SECOND(time)、MICROSECOND(expr)函数。

  23. 兼容mysql DATE_FORMAT(date,format)函数。

  24. 兼容mysql字符转为时间的行为。

  25. 兼容mysql DATE_ADD(date,INTERVAL expr unit)、DATE_SUB(date,INTERVALexpr unit)函数。

  26. 兼容mysql DATEDIFF(expr1,expr2)函数。

  27. 兼容mysql SUBDATE(date,INTERVAL expr unit)、SUBDATE(expr,days)函数。

  28. 兼容mysql timestampdiff函数。

  29. 兼容mysql uuid()函数。

  30. 兼容mysql es_encrypt和aes_decrypt函数。

  31. 兼容mysql hour、quarter函数。

  32. 兼容mysql NULLIF函数。

  33. 兼容mysql IF函数。

  34. 兼容oracle blob、clob类型。

  35. 兼容oracle对闰年的计算方法。

  36. 兼容oracle to_yminterval函数。

  37. 兼容oracle操作符空属性行为。

  38. 兼容oracle NULL和空串行为。

  39. 兼容oracle Chr()函数兼容支持。

  40. 兼容oracle insert all/first语法兼容。

  41. 兼容oracle with as语法兼容。

  42. 兼容oracle函数regexp_count。

  43. 兼容oracle函数regexp_instr。

  44. 兼容oracle函数INSTR。

  45. 兼容Oracle ALL_DB_LINKS表与视图。

  46. 兼容oracle to_timestamp_tz函数。

  47. 兼容oracle sys_extract_utc函数。

  48. 兼容oracle求余函数remainder。

  49. 兼容oracle分析函数ratio_to_report。

  50. 兼容oracle UNPIVOT(列转行)支持。

  51. 兼容oracle修改约束alter view drop constraint语法。

  52. 兼容oracle日期操作函数to_dsinterva。

  53. 兼容oracle支持虚拟列分区。

  54. 兼容oracle any(参数列表)、all(参数列表)函数。

  55. 兼容oracle REGEXP_SUBSTR函数。

  56. 支持like语法中数值类型到字符类型的隐式转换。

  57. plsql语言支持。

  58. plsql支持oracle PLSQL的GOTO和标签。

  59. plsql支持oracle触发器的语法。

  60. plsql支持不指定language语法。

  61. plsql支持集合类型。

  62. plsql支持oracle的IS关键字。

  63. plsql支持触发器视图。

  64. plsql支持兼容oralce包功能。

安全功能

  1. 审计模块增加审计csv和表数据加密保护。

  2. 安全实例新增wal日志加密加密保护功能。

  3. uxcrypto支持GM算法。

  4. 安全实例全库加密优化。

  5. 安全实例SQL语句中敏感信息保护。

  6. 安全报告参数更新。

  7. 扩张审计查询函数返回范围增加用户oid和数据库oid。

  8. 安全集群身份鉴别过程支持国密算法(SM3)校验。

  9. 新增密钥有效期查询接口。

  10. 修改安全实例默认审计范围。

  11. 安全实例下统计表信息加密及访问限制。

  12. 优化索引加密功能,支持加密列索引加密。

  13. 安全实例下uxsql登录提示增加应用名称。

  14. 列加密资源管理。

  15. 安全实例下工具适配,包括:ux_ctl、uxsql、init、ux_dump、ux_dumpall、ux_restore、ux_waldump、ux_basebackup、ux_probackup、ux_rman、ux_resetwal、vacuumdb、rewind、repmgr。

  16. 安全实例下用户预留连接数调整。

  17. 安全集群故障恢复功能完善。

安装卸载

  1. 适配支持initdb安全参数。

  2. 优化静默安装,把xml打到安装包。

  3. 支持xml指定卸载保留文件。

  4. 支持多次安装注册服务。

工具

  1. JDBC适配支持身份鉴别过程支持国密算法校验,适配clob和blob的修改。

  2. JDBC获取整数方法支持布尔类型数据。

通用功能

  1. license优化。

  2. redis_fdw插件合入。

  3. ux_cron插件秒级支持。

  4. ux_bulkload工具适配及改造支持。

  5. ptrack插件适配支持。

  6. repmgr支持同步模式转异步模式,超时时间可配置。

  7. repmgr支持安装数据库时包含repmgr.conf。

  8. repmgr命令支持参数密码。

  9. repmgr删除对环境变量(UXDATA)的依赖。

功能限制

兼容性功能

  1. 兼容模式下表名不能查过63位(不包括63)。

  2. clob、blob如果不使用接口或读写函数,则最大可处理1G的数据。

  3. 兼容mysql change语法,仅支持修改uxdb支持的属性。

  4. oralce包仅是支持部分兼容,变量、异常、类型声明等均不支持。

  5. to_timestamp_tz 函数的部分情况时区与oracle不兼容。

  6. uxdb的正则规则和oracle不完全一致(regexp_substr、regexp_count、regexp_instr),存在一定差异。

安全性功能

  1. 列加密表列总数不能超过32列。

  2. 事务块中若发生系统级异常,恢复后存在无效占位,再次restart可避免。

  3. 高可用环境下钱包行为无法跟随主备切换自动变化,需手动执行打开。

  4. 高可用审计开启环境下,repemgr每次心跳连接会产生3条连接登录日志信息。

其他

  1. JDBC不再支持二进制数据存bytea类型。

v2.1.1.5C

改进点

1.兼容性

  1. 兼容oracle round函数,扩充支持数据类型。

  2. 新增oracle userenv()函数。

  3. 新增dblink 兼容支持CREATE/DROP DATABASE LINK语法。

  4. 兼容mysql 约束启用和禁用功能。

  5. 兼容MySQL find_in_set(str,strlenth)函数。

  6. 兼容oracle months_between函数。

  7. 兼容mysql的UPDATE...JOIN....WHERE语法。

  8. 兼容oracle的select for update wait

  9. 新增to_number支持fmt为XXX类型。

  10. 新增forall功能实现。

  11. 兼容SAMPLE功能。

  12. 兼容oracle listagg() within group(order by)函数。

  13. 新增uxdb运行模式:standard、oracle、mysql。

  14. 新增物化视图支持rowid功能。

  15. 兼容oracle with function语法功能。

  16. 兼容oracle last_day函数。

  17. 兼容show create table语法。

  18. 兼容number类型。

  19. 兼容支持使用number类型支持指定精度。

  20. 兼容oracle pivot函数

  21. 兼容支持oracle视图75个。

  22. 支持with procedure语法。

  23. oracle模式下,兼容支持基础Date类型。

  24. windows适配插件:cstore_fdw、uxaudit、uuid-ossp、ux_cron、ux_hint_plan、ux_pathman、uxcrypto、pldebugger、jsquery、passwordcheck。

  25. bin目录下工具参数--running mode适配standard(默认)、oracle/compatible、mysql。

2.安全功能

  1. 新增toast表加密功能。

  2. 新增用户锁定解锁,会话锁定解锁功能。

  3. 新增选择性审计功能,包括:审计的开关、审计的设置与取消(对象级审计、操作级审计、系统审计)、审计设置范围、审计配置信息查看等。

  4. uxsql增加上次登录失败访问方式、上次登录成功的访问方式等登录信息。

  5. uxsql增加登录失败总数信息。

  6. 新增设置以前使用过的口令在XX个月内无法再使用。

  7. 新增统计CPU计算能力的SQL函数 calculate_host_cpu_rate函数。

  8. 新增限制用户连接会话次数。

  9. 新增表空间加密功能。

  10. 适配安全模式initdb支持pwdfile输入系统用户密码。

  11. 创建表使用create table like建表时,增加INCLUDING ENCRYPT选项,使新表保留原表中的加密列的属性。

  12. create table as/物化视图支持设置加密列。

  13. 列加密关键字encrypt改为encrypteddecrypt改为decrypted

  14. 新增gmsll库编译级别参数,基于GmSSL的RSA算法的ssl加密链接。

3.安装卸载

  1. uxdb支持静默安装,在xml文件中支持指定uxdb.lic文件的位置。

  2. 静默安装支持指定license文件。

  3. 支持安装卸载过程中的初始化过程进行模式适配。

  4. initdb图形化工具适配uxdb运行模式standard/oracle/mysql。

4.工具

  1. repmgr、ux_basebackup支持备份备节点的相关信息,写入到备机上的initdb_record.txt文件中。

  2. JDBC适配with function/procedure

  3. initdb工具适配修改initrecord文件中运行模式。

  4. mpp支持适配兼容模式下的所有测试用例。

功能限制

兼容性功能

  1. 兼容模式下表名不能超过63位。

  2. dblink表结构敏感只支持linux。

安全性功能

  1. 新建加密列时,如果解密列为in类型,则加密列不能加盐(mac)。

  2. 加密表空间最多50个,不可配置。

  3. windows安全功能不支持。

  4. ux_stat_gssapi系统视图encrypted字段使用,必须带双引。

  5. create table as/like 物化视图:物化视图不支持修改算法密钥等列加密相关操作;禁止创建临时加密表或物化视图。

其他

  1. 安全模式集群暂不支持ux_dumpux_dumpall工具。

  2. win不支持安全功能。

7.v2.1.1.5B

改进点

1.兼容性

  1. 添加date_format函数,将日期值格式化为特定格式返回。

  2. 添加列转行的有序聚集函数LISTAGG。

  3. 添加trunc(text)函数,截取数值或者时间类型格式的字符串。

  4. 添加regexp_like函数,从string中查找一个匹配并且pattern不包含带括号的子表达式。

  5. 完善substr函数,截取字符串或字符串表达式。

  6. 完善to_date函数,将指定类型的数据转化为日期。

  7. 完善TO_CHAR函数, 将text/varchar参数的文本格式转化为字符串。

  8. 新增grouping_id函数,将超聚合行与常规分组行区分开来。

  9. 新增支持运算符之间有空格。

  10. 完善mod(double precision,integer)函数,对两个参数进行求余运算。

    完善btrim(expr[,chr])函数,除expr头尾的指定chr。

  11. 新增to_number函数,将指定类型的数据转化为数字。

  12. 新增匿名块功能,能够动态地创建和执行过程代码的结构,不需要以持久化的方式将代码作为数据库对象储存在数据库中。

  13. 完善decode函数,将输入的数值与函数中的参数列表相比较,根据输入值返回一个对应值。

  14. 完善nvl(expr1,expr2)函数,返回表达式中第一个参数不为null的表达式,如果表达式都是null,则返回null。

  15. 新增systimestamp关键字,用于获获取到系统的当前时间,包含时区信息,精确到微秒。

  16. 新增SYS_CONTEXT函数,获取环境上下文信息或判断当前会话角色。

2.安全功能

  1. 新增钱包主密钥管理功能。

    钱包是一个加密容器,用于存储加密功能的主密钥。钱包对密钥进行管理,使密钥与数据文件分开,从而即使得到了数据文件,没有钱包文件,数据也是无法解密的,大大提高了数据的安全性。

  2. 新增主密钥替换功能,即钱包文件替换功能。

  3. 新增数据秘钥替换,即修改数据加密秘钥及算法。

  4. 新增加密表配置操作。

    a. 新增向现有表添加加密列功能。

    b. 新增修改列的加密属性功能,即迁移脱密功能(明文列迁移为加密列,加密列脱密为明文列)。

    c. 新增修改列类型功能,即修改加密表中加密列的类型。

  5. 新增创建加密表时支持加mac/nomac功能。

3.其他

  1. 添加层次查询功能。

  2. 新增配置表空间最大限额功能。

  3. uxmpp升级(9.2.2 --> 10.2.5),支持标准及兼容模式。

功能限制

兼容性功能

  1. 兼容模式下表名不能查过62位。

  2. 函数和decode、nvl、isnull功能不支持clob、blob、binary、varbinary、raw、longvarbinary类型。

  3. systimestamp作为关键字保留,不能用其作为表名、函数名、列名等标识符。

  4. grouping_id必须带有group by子句,不能用作where条件,可以使用having子句筛选。

  5. listagg参数类型仅支持字符串类型,聚集参数和第一个排序参数必须为同一个参数。

安全性功能

  1. 新建加密列时,如果解密列为in类型,则加密列不能加盐(mac)。

其他

  1. 安全模式集群暂不支持ux_dumpux_dumpall工具。

  2. win不支持安全功能(审计、三权分立、强访、列加密、身份鉴别&用户属性控制等)。

  3. 兼容模式下表名不能超过63位。

v2.1.1.5A

改进点

兼容性

  1. 新增大对象操作函数:empty_blob、empty_clob、blob_import、blob_export、clob_import、clob_export。

  2. 隐式转换与orafce插件分离,新增隐式转换插件(ux_implicit)。

  3. 新增minus关键字。

  4. 支持空字符串转换为null。

  5. 兼容支持oracle主键、外键enable/disable语法。

  6. 兼容支持oracle同义词语法,对齐语法结构。

  7. 兼容支持oracle rowid功能。

  8. 增加long、double、binary类型。

  9. blob、clob、binary、varbinary、longvarbinary、raw类型,由仅支持兼容模式,修改为通用支持。

  10. number类型支持方案从语法映射变更为domain。

  11. rownum支持场景完善扩充。

强制访问控制(mac)

  1. 安全模式数据库默认加载强访插件,且插件建在ux_catalog下。

  2. 非安全模式数据库不能创建强访插件,如果强行创建会报错。

  3. 强制访问控制的生效在数据库权限(ACL)判定之后,通过校验ACL后才进行访问控制校验。

  4. 安全模式集群,新增cache开关(enable_mac_cache),在同一张表上大量insert数据时,提升insert性能,开关配置如下:

    a. 配置文件修改,所有用户有效。

    b. uxsso修改,只有uxsso建的表有效。

    c. 该参数默认不会在uxsino.conf文件中添加,需要手动添加。

  5. 强访策略只支持在普通表中建立,建立策略的表上可以使用外键和约束、大对象、触发器、存储过程、toast列,其他表类型暂不支持建立策略。

  6. 强制访问控制-create as,需要能够复制强访策略的表。

  7. 设置了强制访问控制的策略的表,由有权限(owner)的成员进行导入导出,并只能导出有权限的那一部分。

  8. 设置了强制访问控制的策略的表,用with police来控制是否导出策略。同时在设置了强访策略的模式、数据库层面,均支持导入和导出。

  9. 支持copydumprestore导出。

  10. 安全策略中等级和范围均由安全管理员(UXSSO)进行操作。

列加密

  1. 安全模式实例默认创建加密插件,并且建在ux_catalog下。

  2. 非安全模式实例不能创建加密插件,如果强行创建会报错。

  3. 列加密配置:在建表时进行指定列加密,语句为:create table 表名 (列名 类型 [encrypt] [salt|no salt]) [encrypt using[加密算法]]

    a. 可以在创建表的时候指定加盐,盐值的作用是相同的数据加密后的列中数据文件不同,盐值明文拼接在原文上,加密后存储。盐值的产生使用原有接口。int类型并不支持加盐,int类型加盐后报错提示“不支持在int类型上加盐。

    b. 加密算法在数据库表级别可配置,创建表的时候可以指定,支持算法范围SM4、AES等。

  4. 列加密支持表类型为:普通表、unlogged表、分区表和继承表支持。临时表、local、global、toast表不支持列加密。

  5. 支持外键、索引加密。

  6. 列加密支持数据类型(5种):int、vachar(定长和变长)、char、NUMERIC、text5种,int逻辑和其他不同,不支持的数据类型被指定加密时要报错。提示信息为“该类型不支持加密”。

  7. 列加密表(单表)加密列数量为0至32列。如果创建或修改包含加密列的表,超过32个列则报错。

  8. 数据库集群实例支持0至100个加密表,如果超过100个表则创建包含加密列的表时报错。

  9. 列加密表支持操作。

    a. 支持普通表或者含有加密列的表增加/删除普通列。

    b. 支持含有加密列的表删除普通/加密列。

    c. 支持删除含有加密列的表。

    d. 支持删除部分数据。

    e. 表数据(where开关关闭)。

    f. 表数据(where开关打开)。

    g. 支持删除全表。

  10. 回显

    a. 数据库用户查看加密列时,有权限则显示明文,没权限则报错或者返回NULL,在uxsinodb.conf中可配置。

    b. 回显采用GUC参数控制,改参数为实例级别,用户无加解密权限时默认报错,可以修改GUC参数改变回显方式,修改后需要重启集群生效。

  11. 密钥管理

    a. 密钥使用数据库中默认密钥,使用密钥前由管理员分配密钥的权限且用\col语句打开列加密功能。

    b. 密钥由系统管理员(uxsmo)进行管理和分配的。

    c. 密钥存储在DB中,存储密钥的表owner是UXSMO。

    d. 密钥在初始化的时候和集群一起生成,需要用户输入一个口令串用来加密根密钥,根密钥不容许修改。

    e. 由UXSMO使用grant encrypt_decrypt on ux_col_root_key to U1授权给u1进行加解密。

    f. 由UXSMO使用revoke encrypt_decrypt on ux_col_root_key from U1收回u1加解密权限。

驱动

  1. OCI/NCI驱动

    新增48个接口。

    时间类型接口5个:NCIDateTimeConstruct、NCIDateTimeFromText、NCIDateTimeToText、NCIDateTimeGetDate、NCIDateTimeGetTime。

    时间间隔类型接口10个:NCIIntervalSetYearMonth、NCIIntervalGetYearMonth、NCIIntervalSetDaySecond、NCIIntervalGetDaySecond、NCIIntervalFromText、NCIIntervalToText、NCIIntervalCompare、NCIIntervalAdd、NCIIntervalAssign、NCIIntervalCheck。

    数字类型接口13个:OCINumberToText、OCINumberFormText、OCINumberToInt、OCINumberFormInt、​OCINumberToReal、OCINumberFormReal、OCINumberAdd、OCINumberAssign、​OCINumberDiv、OCINumberIsInt、OCINumberMod、OCINumberMul、OCINumberSub。

    直接文件接口5个:OCIDirPathPrepare、OCIDirPathColArrayEntrySet、OCIDirPathColArrayToStream、OCIDirPathLoadStream、OCIDirPathFinish。

    分片绑定接口2个:OCIStmtSetPieceInfo、OCIStmtGetPieceInfo。

    动态绑定接口2个:OCIBindDynamic、OCIDefineDynamic。

    大对象接口11个:OCILobAppend、OCILobTrim、OCILobErase、OCILobCopy、OCILobOpen、 OCILobEnableBuffering、OCILobDisableBuffering、OCILobFlushBufferOCILobClose、 OCILobLocatorAssign、OCILobLocatorIsInit。

  2. 取消了对于临时大对象个数的限制。

  3. 大对象每次写的最大大小修改为1GB。

  4. 增加了OCI配置文件(dbsql/lib/oci/config.ini),对OCI的行为进行控制。

  5. 增加了多行输入输出的功能,现在可以一次绑定多行。

  6. 增加对多事务的支持,现在可以同时运行多个事务。

  7. 现在OCILogon接口的连接句柄可以为空。

  8. 增加了对OCI_ATTR_PREFETCH_ROWS的支持,现在支持设置预取值。

  9. 修改大对象长度的获取策略,不再有1G的限制。

  10. 对OCIStmtExecute函数偏移的功能进行了支持。

  11. 修复了OCI无法识别强制转换的bug。

  12. 允许了NULL值的插入。

  13. 支持了默认自动获取功能。

  14. 修复了创建连接有效临时大对象后连接断开失败的bug。

身份鉴别及用户属性设置

  1. 普通用户支持用户口令有效期设置。

  2. 密码口令强度。

  3. 支持口令失败次数限制。

  4. 支持用户有效期。

  5. 用户连接超时限制。

  6. 支持用户登录时间限制。

  7. 登录信息及历史登录信息提示。

其他

  1. bin工具向下兼容2113及之前版本。

  2. 新增大对象功能扩展插件ux_lob_operate,具体请参见《优炫数据库管理系统特性参考手册》中的“ux_lob_operate”章节。

功能限制

强制访问控制(mac)

  1. 等级:比较关系(大于、等于、小于),等级不能有重复值。范围:包含关系(包含、不包含),范围不能有重复值。

  2. 安全模式下创建表时会增加三个隐藏列 ,非安全模式不会增加。

列加密

  1. 加密列只能在创建表时指定。

  2. 算法与秘钥是表级,一个表只能有一个算法和秘钥。

  3. 秘钥不可自定义。

  4. 不支持alter对加密列表操作。

  5. 每个集群默认有100个表配置加密列(guc可配置)。

  6. 配置加密列的表,最多包含32个字段(加密列+非加密列)。

  7. 含有加密列的表,在用户无列加密权限的情况下不能执行updateinsert操作,可以执行selectdelete操作。

  8. 加密列只能在创建表时指定,指定后暂不支持脱密。

  9. 不能在已有表上配置加密列信息。

  10. 含有加密列的表,禁止修改表中任何列的类型。

  11. 临时表、local、global不支持列加密。

  12. 不支持对加密列名称修改。

  13. 不支持临时表、local、global、toast表新建列加密。

  14. 列加密目前不支持数据脱密功能。

OCI/NCI

  1. 通过OCI/NCI接口使用大对象接口之前需要先创建ux_lob_operate插件,具体请参见《优炫数据库管理系统OCI接口使用手册》中“接口介绍”章节中的“大对象”小节。

其他

  1. 安全模式集群暂不支持ux_dump、ux_dumpall工具。

  2. win不支持安全功能(审计、三权分立、强访、列加密、身份鉴别&用户属性控制等)。

  3. 兼容模式下表名不能超过63位。

v2.1.1.4s

改进点

  1. 增加安全功能开关,并在初始化的时候可以选择是否带安全功能。

  2. 安全功能开启时,默认存在三个管理员,分别是系统管理员、安全员、审计员,管理员权限互补,三权分立。

  3. 安全功能开启时,支持查看安全报告。

  4. 安全功能开启时,登录数据库的信息和非安全功能不同。

  5. 安全功能开启时,数据库具备审计能力,支持对DDL、role、function、write、read、vacuum、checkpoint等进行审计,包含成功和失败的事件结果。

  6. 安全功能开启时,数据库对象中支持审计的表、视图、存储过程、函数、行列。

  7. 安全功能开启时,数据库审计参数可以配置。

  8. 增加了OCI配置文件,对OCI的行为进行控制。

  9. 增加了多行输入输出的功能,现在可以一次绑定多行。

  10. 增加对多事务的支持,现在可以同时运行多个事务。

  11. 支持OCILogon接口的连接句柄为空。

  12. 增加了对OCI_ATTR_PREFETCH_ROWS的支持,支持设置预取值。

  13. 修改大对象长度的获取策略,不再有1G的限制。

  14. 对OCIStmtExecute函数偏移的功能进行了支持。

不兼容性

  1. 不支持同时使用running-mode=compatible和ignore-case初始化实数据库。

  2. 安装环境检测。目前只有图形化安装有检测机制,tar包安装没有检测。

  3. 聚合函数不能使用rownum。

  4. centos 8.0以上版本可能会由于系统自带软件版本太高,而无法安装或运行UXDB。

v2.1.1.4

改进点

  1. 将UXDB分为标准模式和兼容模式。

    标准模式:数据库标识符小写;默认关闭语法开关且不加载orafce插件。

    兼容模式:数据库标识符大写;默认打开语法开关且加载orafce插件。

  2. 支持同时使用running-mode=standard和ignore-case初始化实数据库。

  3. 兼容模式支持Varbinary、Clob、Blob、raw 、longvarbinary、longvarbinary、number(实质是numeric类型的别名)数据类型。

  4. 兼容模式支持时间和数字类型运算返回值为数字型。

  5. 兼容模式timestamp类型支持'YYYYMMDDHH24MISS'时间格式的插入、查询以及空字符插入、查询。

  6. 兼容模式支持numeric、int类型插入空字符。

  7. 兼容模式支持timestamp时间类型插入0(int)。

  8. 兼容模式支持distinctorder by子查询逆序排序。

  9. 支持distinct子句和order by子句共用时,order by子句中的字段,可以不出现在distinct target list中。

  10. 支持sysdate关键字,返回当前日期和时间。

  11. 支持to_char(text,text)函数,将字符串形式的时间戳转换为指定格式字符串输出。

  12. 支持to_date(bigint,text)函数,将bigint类型的数据按照格式转换。

  13. 支持dateadd和datediff日期运算函数。

  14. 支持isnull函数,返回参数列表中第一个非空参数的值,两个参数仅当两个参数都为空时返回空。支持一个参数或两个参数。

  15. 支持rownum语法功能。兼容Oracle伪列所做语法功能适配。利用uxdb的limit语法进行改造。

  16. 支持子查询无别名语法。在执行select语句时,子查询语句可以不指定别名。

  17. 支持delete不加from语法。删除表中的数据。

  18. 支持update语句使用别名语法。兼容达梦语法,使用update语句时,可以使用别名来代替目标表名。

  19. 支持limit x, y分页语法。

  20. 支持storage语法。在新建表时指定表空间(包括默认表空间main)。

  21. 支持alter table constraint primary key语法。

  22. 支持创建表时指定聚簇cluster、非聚簇not cluster语法。

  23. 支持TOP语法。在使用select语句时,可以使用top子句来进行筛选结果。

  24. 支持序列.nextval操作语法,如:select seq.nextval

  25. 支持对表添加约束时约束名省略语法,如:alter table test1 add constraint check(id>0);

  26. 支持root用户操作数据库。增加控制root用户启动数据库的编译参数。

  27. 支持UXDB与PG之间逻辑复制功能。

  28. 支持uxsql连接数据库时指定密码,如:uxsql -Y passwd

  29. 支持oarcle_fdw-2.4.0、mysql_fdw-2.6.0、tds_fdw-2.0.2插件。

  30. 支持mysql group by语法。group by列表中的字段可以不出现在select_list中。

  31. 扩展like的用法:增加like(~~)操作符的转换,如:select * from test where a like '%1%'; (a为int类型)。

  32. win下增加GetwinInfo.bat脚本,生成license的json文件。

  33. 适配mysql case when返回值类型。

  34. 支持OCI接口。实现接口总数60个,各模块接口数分别为:连接、认证和初始化:9个;句柄和描述符:7个;绑定、定义和描述符:4个;语句:4个;事务:4个;原始函数:6个;杂项:2个;LOB:24个。

  35. UXDB默认安装路径改为/opt/uxdbinstall 。

不兼容性

  1. 不支持全库wal加密。

  2. 不支持同时使用running-mode=compatible和ignore-case初始化实数据库。

  3. 安装环境检测。目前只有图形化安装有检测机制,tar包安装没有检测。

  4. 聚合函数不能使用rownum。

  5. 时间和数字类型运算,兼容模式返回数字型,标准模式返回interval类型。

  6. win下非系统用户无法删除uxdb服务。

  7. centos 8.0以上版本可能会由于系统自带软件版本太高,而无法安装或运行。

  8. repmgrd由于堆栈异常原因,可能会出现core问题,该问题目前还没有查找到原因,该问题遗留。

  9. removedb工具目前仅支持绝对路径删除数据库实例。以删除/opt/uxdbinstall/dbsql/bin目录下的test实例为例,如下所示。

    removedb /opt/uxdbinstall/dbsql/bin/test
    

v2.1.1.3

改进点

  1. 提供了cstore_fdw插件。

    主要是利用列性质仅通过从磁盘读取相关数据来提供性能,并且可以将数据压缩,以减少数据归档的空间需求。

  2. 支持闪回删除功能。

    借助于插件uxtrashcan来实现UXDB数据库的“回收站”暂存drop的表的功能。

  3. 支持闪回表功能,对于误操作可以将表中的数据恢复到该时间点之前的状态。

  4. 服务端支持GBK/GB18030字符集。

  5. 创建初始数据库时,支持大小写敏感。

  6. 支持语法开关,增加兼容性语法的执行效率。

  7. 在兼容语法开关开启的状态下,支持同义词、正则表达式、“+”语法、insert all/firstmerge into和q'转义字符兼容oarcle语法。

  8. 提供了c和c++编程接口(实现了部分API)。

  9. 新增了高可用repmgr工具,主要用于主备管理、故障切换。

  10. 新增了备份管理工具ux_probackup。

  11. 更新了oraface插件功能。

    主要更新:隐式转换、添加视图、一些decode函数场景。

  12. 改进类型tid列上的连接优化。

    这些更改主要提高了ctid列上自连接的效率。

  13. 新增了uxdb图形化工具,用于初始化uxdb及一些配置项修改。

不兼容性

  1. 不支持列存特性。

  2. UXDBWeb中不支持UXFS的使用。

  3. 闪回删除,闪回表,repmgr高可用工具,cstore_fdw插件,OCI和OCCI客户端接口不支持Windows系统。

  4. UXDB的标准版和社区版不支持cstore_fdw插件。

  5. 不支持UXDB增量迁移工具。

  6. 不支持Mysql_migration_inc工具集同步某个模式下的某张表。如下所示会同步失败:

    ./add_table_inc -f conn.config -p ux123456 -r mysql123456 -t table_owner1.test_table
    
  7. insert all/first语法

    a. 实现过程中相关else部分的代码是固定不变的,因此insert all/first when语句后面必须有一个else

    b. limit单次查询问题。

    Oracle虽然没有limit,但是可以通过rownum实现类似功能。逻辑上,rownum的查询是先于每一条when的,只执行一次。目前uxdb实际上是limit在每条when之后的,也就是说,没有根本上实现select一次源表,而是多次,每条into子句都有一次select,每次select都有这个limit子句。本质上,这个差异其实是目前的实现方案导致的。

  8. 同义词语法不能查询同义词与属主映射关系;多用户之间删除对方同义词,暂时没有权限控制;两个同义词名称不能相同,如:

    create synonym table test on test
    
  9. Oracle部分系统视图兼容

    新增Oraclesys用户和dba角色拥有的监视视图,是建立在模式之下的,使用这些视图需要修改uxsinodb.config配置文件中search_path参数的值,将sys模式加载之后,才能访问到这几个视图;一旦修改search_path参数,在任何用户下都可以访问到新增的视图,这与oracle对这些视图的管理存在差异,oracle中对于DBA角色拥有的视图的查询必须具有DBA角色权限。

  10. 服务器端支持GBK/GB18030编码,GB18030 map字符映射表支持不全;部分GB18030四字节字符无法转换为GBK。

  11. 大小写敏感

    like语句比较时大小写敏感;关键字没有按照查询sql输入的大小写字符进行存储,按照小写存储。

  12. 闪回删除的同名删除、恢复支持重命名迭代没有实现。

  13. 兼容q’转义字符语法

    定界符(quote_delimiter)只能是单字节字符。oracle还可以是多字节字符,比如中文。

    定界符(quote_delimiter)不能是单引号,可以是空格。oracle是支持单引号,不能是空格。

  14. OCI/OCCI实现了部分接口

    不支持OCIEnvCreate函数:执行OCI函数的执行创建和初始化一个环境。

    不支持OCIDescriptorAlloc、OCIDescriptorFree、OCIParamGet。

    不支持OCIStmtFetch。

v2.1.1.2

改进点

  1. ALTER TABLE ATTACH PARTITION现在会较少的进行锁定。

  2. 改进了有很多重复项时btree索引的性能和空间利用率。之前重复的索引条目在其重复组中无序存储。这会导致索引插入期间的开销,由于过多的页面拆分而浪费了空间,并且降低了VACUUM回收整个页面的能力。现在重复的索引条目使用堆排序。

  3. 允许较小的多列btree索引。

  4. 通过减少锁定开销来提高btree索引插入的速度。

  5. 索引重命名时会进行更少的锁定。

  6. 改进UNION ALL对只有一个孩子的分区和查询的优化。

  7. 改进对没有检查约束域的处理。纯粹用作类型别名的域不再引起优化困难。

  8. 当LEAST和GREATEST的参数为常数时,对它们的调用进行预求值。

  9. 提高优化器的能力,以验证具有IS NOT NULL条件的部分索引是否可用于查询。在调用查询涉及强制转换或大型 x IN (数组)子句的更多情况下,现在可以识别可用性。

  10. ANALYZE使用为每列定义的排序规则计算统计信息。以前,数据库的默认排序规则用于所有统计信息。对于具有非默认归类的列,这可能会为优化程序提供更好的行为。

  11. 改进ctid列上不等式比较的选择性估计。

  12. 改进类型tid列上的连接优化。这些更改主要提高了ctid列上自连接的效率。

  13. 加快关键字查找。

  14. 改善position()相关功能中多字节字符的搜索性能。

  15. 允许对toast值进行最小程度的解压缩。这对于仅需要检查toast字段的初始部分的例程很有用。

  16. 允许ALTER TABLE ... SET NOT NULL避免不必要的表扫描。当表的列约束可以识别为不允许为空时,可以对此进行优化。

  17. 当会话时区为UTC(Noah Misch)时,允许ALTER TABLE ... SET DATA TYPE在timestamp和之间timestamptz进行更改,以避免表重写。在UTC时区中,这两种数据类型是二进制兼容的。

  18. 提高字符串转换为 int2或 int4整数的速度。

  19. 在SERIALIZABLE隔离模式下允许并行查询。以前,在此模式下禁用并行性。

  20. 对随机I/O使用 pread()和pwrite(),这减少了I/O所需的系统调用数量。

  21. 提高在FreeBSD上设置进程标题的速度。

  22. 只允许从一定百分比的事务中记录语句。参数log_transaction_sample_rate对此进行控制。

  23. 将校验和失败计数器添加到ux_stat_database。

  24. 在系统视图ux_stat_database中添加全局对象跟踪。全局对象显示为ux_stat_database,datid值为零。

  25. 限制ux_stat_ssl非特权用户的行的可见性。

  26. 服务器启动时,发出包含服务器版本号的日志消息。

  27. 如果一个新的连接立即关闭,防止记录“不完整的启动数据包”。这样可以避免某些形式的监控记录垃圾邮件。

  28. 在log_connections日志消息中包含application_name(如果已设置)。

  29. 使walreceiver将其应用程序名称设置为集群名称(如果已设置)。

  30. 为WAL段的fsync添加一个等待事件。

  31. 添加GSSAPI加密支持。

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

  32. 允许clientcert ux_hba.conf选项检查数据库用户名是否与客户端证书的公共名称匹配。启用了此新检查clientcert=verify-full。

  33. 允许使用DNSSRV记录发现LDAP服务器。

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

  34. 允许基于时间的服务器参数使用微秒(us)。

  35. 允许为浮点服务器参数定义单位。

  36. 添加wal_recycle和wal_init_zero服务器参数来控制WAL文件的回收。避免文件回收对于像ZFS这样的即拷即写的文件系统是有益的。

  37. 允许在重新加载时更改某些恢复参数。这些参数是archive_cleanup_command,promoting_trigger_file,recovery_end_command和recovery_min_apply_delay。

  38. current为recovery_target_timeline添加一个明确的值。

  39. 如果两阶段事务状态文件已损坏,则使恢复失败。以前,会记录警告并继续进行恢复,从而使事务丢失。

  40. 添加REINDEX CONCURRENTLY选项,允许重新启动而不锁定写。这也由reindexdb应用程序的--concurrently选项控制。

  41. 添加对生成的列的支持。生成的列的内容是根据表达式(包括对同一表中其他列的引用)计算得出的,而不是由INSERTUPDATE命令指定的。

  42. COPY FROM添加WHERE子句以控制接受哪些行。这提供了一种筛选传入数据的简单方法。

  43. 允许更灵活地添加枚举值。以前,不能在事务块中调用altertype... ADD VALUE,除非它是创建枚举类型的同一事务的一部分。现在可以在以后的事务中调用它,只要在提交新枚举值之前不引用它。

  44. 添加命令来结束一个事务并启动一个新事务。命令是COMMIT AND CHAIN和ROLLBACK AND CHAIN

  45. 添加VACUUMCREATE TABLE选项,以防止VACUUM截断尾随的空页。

    这些选项是vacuum_truncate和toast.vacuum_truncate。使用这些选项可减少VACUUM的锁定要求,但可以防止将磁盘空间返还给操作系统。

  46. 允许VACUUM跳过索引清理。

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

  47. 对于不能立即被锁定的表格。添加跳过VACUUMANALYZE操作的能力。此选项称为SKIP_LOCKED。

  48. 允许VACUUMANALYZE采用可选的布尔参数规范。

  49. 防止TRUNCATEVACUUMANALYZE请求对用户没有权限的表进行锁定。这样可以防止未经授权的锁定,这可能会干扰用户查询。

  50. 添加EXPLAIN选项SETTINGS以输出非默认优化器设置。当使用auto_explain时,也可以通过设置auto_explain.log_settings来获得这个输出。

  51. OR REPLACECREATE AGGREGATE添加添加选项。

  52. 允许使用 altertable 修改系统目录的选项。reloptions现在支持对目录和自动真空设置的修改(仍然需要设置allow_system_table_mods)。

  53. 在为外键选择默认约束名称时,使用所有键列的名称。以前,约束名称中只包含第一个列名,导致多列外键不明确。

  54. 更新关于Unicode的各种知识以匹配Unicode 0。例如,这修复了uxsql错误格式化包含组合字符的输出的情况。

  55. 更新Snowball词干词典,以支持新语言。这增加了对阿拉伯语,印尼语,爱尔兰语,立陶宛语,尼泊尔语和泰米尔语词干搜索的支持。

  56. 允许创建排序规则以报告不按位相等的字符串的字符串相等性。此功能支持“ 非确定性”归类,可以定义区分大小写和重音的等式比较。例如,可以比以前更容易地对文本列进行不区分大小写的唯一性约束。仅ICU归类支持此功能。

  57. 在旧的ICU版本中添加对ICU排序属性的支持。这允许在所有ICU版本中以一致的方式自定义排序规则。

  58. 允许数据类型名称与其他文本类型进行更无缝的比较。name类型的行为就像是text具有默认排序规则“ C ”的类型的域。这样可以更有效地处理交叉类型比较。

  59. 添加对hyperbolic functions的支持。为了符合标准,还添加log10()作为log()的别名。

  60. variance()通过使用更精确的算法来提高统计聚合的准确性。

  61. 允许date_trunc()有一个附加参数来控制时区。这比使用AT TIME ZONE子句更快更简单。

  62. 调整到to_timestamp()/to_date()函数,以更好地避免模板不匹配。这个新行为与同名的Oracle函数更加匹配。

  63. 修复XML函数中的各种错误。具体而言,在XMLTABLE,xpath()和中xmlexists(),修复了以下情况:节点没有任何输出,或者抛出了意外错误,或者省略了XML特殊字符的必要转义。

  64. 允许XMLEXISTS和XMLTABLE中的BY VALUE子句。这个sql标准的子句在UXDBSQL的实现中没有影响,但是它被不必要地拒绝了。

  65. 防止current_schema()和current_schemas()来自被并行的工人运行,因为它们不是平行的,安全的。

  66. 允许RECORD和RECORD[]用作声明返回RECORD的表函数的查询列定义列表中的列类型。

  67. 允许在同一 uxsql函数中使用与这些命令名称相同的SQL命令和变量。例如,允许一个名为COMMENT的变量存在于调用COMMENT SQL命令的函数中。 以前,这种组合导致了一个分析错误。

  68. 向UXSQL添加新的可选警告和错误检查。新的检查允许在运行时验证INTO列数和单行结果。

  69. 允许libpq(以及uxsql)仅报告SQLSTATE错误消息中的值。

  70. 从libpq的options连接参数中删除no-display/debug标志。这允许通过uxdb_fdw设置此参数。

  71. 允许ecpg创建bytea数据类型的变量。这使ECPG客户端可以bytea直接与数据进行交互,而无需使用编码形式。

  72. 添加PREPARE AS对ECPG的支持。

  73. 允许vacuumdb根据其环绕范围为真空选择表。选项是--min-xid-age和--min-mxid-age。

  74. 允许vacuumdb禁用等待锁定或跳过所有可见页面。选项是--skip-locked和--disable-page-skipping。

  75. 将彩色化添加到命令行实用程序的输出。这可以通过设置环境变量的UX_COLOR为always或auto来实现。使用的特定颜色可以通过使用ANSI的颜色转义码来设置环境变量的UX_COLORS来调整。 例如,默认行为相当于:

    UX_COLORS="error=01;31:warning=01;35:locus=01"
    
  76. 在uxsql的输出中显示SQL命令的手册页URL。

  77. 在uxsql的conninfo中显示IP地址。

  78. 改进CREATE TABLECREATE TRIGGERCREATE EVENT TRIGGERANALYZEEXPLAINVACUUMALTER TABLEALTER INDEXALTER DATABASEALTER INDEX ALTER COLUMN选项卡。

  79. 允许将查询产生的值分配给uxbench变量。这个命令是\gset

  80. 通过更清晰的消息和返回码来改进uxbench的错误报告。以前,这只能通过SQL函数或过程信号来实现。

  81. 修复ux_test_fsync以open_datasync在Windows上报告准确的持续时间。

  82. 将并行ux_dump中的操作顺序与后续并行ux_restore恢复所使用的顺序解耦。

    这允许ux_restore执行更完全并行化的并行还原,特别是在原始转储不是并行执行的情况下。并行ux_dump的调度也有所改进。

  83. 允许为ux_dump和ux_dumpall指定extra_float_digits设置。

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

  84. --exclude-database为ux_dumpall添加选项。

  85. 添加CREATE ACCESS METHOD命令以创建新表类型。这使得可以开发新的表访问方法,这些方法可以优化不同用例的存储。现有的堆访问方法仍然是缺省的。

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

    这使扩展程序可以创建计划程序支持功能,这些功能可以提供特定于功能的选择性,成本和行数估计,这些估计取决于功能的参数。支持功能还可以提供简化的表示形式和索引条件,从而大大扩展了优化的可能性。

  87. 简化手动分配的OID的重新编号,并建立用于管理此类OID的新项目策略。

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

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

  88. 使用动态库而不是静态库构建Cygwin二进制文件。

  89. 删除配置开关--disable-strong-random。现在需要一个强大的随机数源。

  90. Printf-family函数以及strerror和strerror_r现在在USDB代码中的各个平台行为一致。

    值得注意的是,printf可以在任何地方都理解% m;在Windows上,strerror处理Winsock错误代码(它曾经在后端但不是在前端代码中这样做);并strerror_r始终遵循GNU返回约定。

  91. 在Windows上需要兼容C99的编译器和MSVC 2013或更高版本。

  92. 使用pandoc而非lynx生成纯文本文档输出文件。这仅影响在INSTALL生成期间生成的文件make dist以及很少使用的纯文本uxdb.txt输出文件。Pandoc比lynx产生更好的输出,并且避免了某些区域设置/编码问题。需要Pandoc 1.13或更高版本。

  93. 支持使用UXDBSQL文档中的图像。

  94. 在更多情况下,允许将ORDER BY排序和LIMIT子句推入uxdb_fdw外部服务器中。

  95. 改善针对uxdb_fdw查询的优化程序成本核算。

  96. 对于引用uxdb_fdw表的视图,正确地执行withcheck选项。

    尽管uxdb_fdw表上的CHECK OPTION被忽略(因为引用是外部的),但是这些表上的视图被认为是本地的,所以这个更改对它们强制执行CHECK OPTION。以前,只验证带有返回 heckoption值的 RETURNING子句的 INSERTUPDATE

  97. 允许ux_stat_statements_reset()更精细。该功能现在允许重置特定数据库,用户和查询的统计信息。

  98. 允许控制auto_explain日志级别。默认值为LOG。

  99. 使用新的标点符号更新无重音规则。

  100. 允许不重音处理编码为组合字符的某些重音。

  101. 允许去除希腊字符的重音符号。

  102. 在amcheck的bt_index_parent_check()函数中添加一个参数,以检查树根的每个索引元组。

  103. 改进oid2name和vacuumlo选项处理以匹配其他命令。

  104. 分区表上的支持索引。

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

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

    新命令ALTER INDEX ATTACH PARTITION使分区上的现有索引与其分区表的匹配索引模板相关联。这为设置现有分区表的新分区索引提供了灵活性。

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

  106. 允许INSERTUPDATECOPY分区表上的行正确地将行路由到外部分区。

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

  107. 允许在查询处理期间更快地消除分区。这样可以加快对具有多个分区的分区表的访问。

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

  109. 在分区表之间的相等联接中,允许将匹配的分区直接联接。默认情况下禁用此功能,但可以通过更改启用此功能enable_partitionwise_join。

  110. 允许针对每个分区分别评估分区表上的聚合函数,随后合并结果。默认情况下禁用此功能,但可以通过更改启用此功能enable_partitionwise_aggregate。

  111. 允许uxdb_fdw将聚合下推到作为分区的外部表中。

  112. 允许并行构建btree索引。

  113. 允许分区扫描以更有效地使用并行工作器。

  114. 允许LIMIT传递给并行工作者,这使工作人员可以减少返回的结果并使用目标索引扫描。

  115. 允许单求值查询(例如:WHERE子句聚合查询)和目标列表中的函数并行化。

  116. 添加服务器参数parallel_leader_participation以控制领导者是否还执行子计划。默认设置为启用,这意味着领导者将执行子计划。

  117. 允许命令CREATE TABLE ... ASSELECT INTOCREATE MATERIALIZED VIEW的并行化。

  118. 与许多并行工作人员一起提高顺序扫描的性能。

  119. EXPLAIN中添加并行工作者分类活动的报告。

  120. 允许btree索引包括不属于搜索关键字或唯一约束但可以通过仅索引扫描读取的列。

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

  121. 改善单调增加索引添加的性能。

  122. 提高哈希索引扫描的性能。

  123. 提高哈希索引扫描的性能。

  124. 如果单个SELECT不能并行化,则允许UNION并行运行每个SELECT

  125. 为哈希,GiST和GIN索引添加谓词锁定。这减少了可序列化模式事务中发生序列化冲突的可能性。

  126. 添加SP-GiST支持的前缀匹配运算符text ^@text。这类似于在btree索引中使用var LIKE‘ word% ’ ,但是它更有效。

  127. 允许使用SP-GiST对多边形进行索引。

  128. 允许SP-GiST使用叶键的损耗表示。

  129. 改进对最常见统计值的选择。以前,最常见的值(mcv)是根据它们与所有列值的频率进行比较来确定的。 现在,mcv的选择是基于它们与非mcv值相比的频率。这提高了算法对均匀和非均匀分布的鲁棒性。

  130. 改善对>=和<=的选择性。以前,这样的情况下使用了相同的选择性估计为>与<分别除非该比较常数MCV秒。对于涉及BETWEEN较小范围的查询,此更改特别有用。

  131. 减少到等效值var=varvar IS NOT NULL。这导致更好的选择性估计。

  132. 改进EXISTSNOT EXISTS查询的优化器行数。

  133. 让优化器考虑评估成本和HAVING子句的选择性。

  134. 允许位图扫描在可能的情况下执行仅索引扫描。

  135. VACUUM期间更新可用空间图。这样可以更快地重用可用空间。

  136. 允许VACUUM避免不必要的索引扫描。

  137. 提高提交多个并发事务的性能。

  138. 使用目标列表中的返回设置的函数来减少查询的内存使用量。

  139. 提高聚合计算的速度。

  140. 允许使用连接uxdb_fdw将UPDATEDELETE推送到外部服务器。以前,仅推送非连接UPDATEDELETE

  141. 在Windows上添加对大页面的支持。这由huge_pages配置参数控制。

  142. 添加列ux_stat_activity。backend_type显示背景工作者的类型。该类型在ps输出中也可见。

  143. 使log_autovacuum_min_duration同时删除的已跳过日志的表。

  144. 添加与表约束和触发器相关的information_schema列。

    具体来说,triggers.action_order,triggers.action_reference_old_table和triggers.action_reference_new_table现在已填充,在此之前它们始终为null。另外,table_constraints.enforced现在存在,但是还没有有效的应用。

  145. 允许服务器在搜索+绑定模式下指定更复杂的LDAP规范。ldapsearchfilter允许使用LDAP属性组合的模式匹配。

  146. 允许LDAP身份验证使用加密的LDAP。

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

  147. 改善LDAP错误的记录。

  148. 允许对文件系统功能的访问由GRANT/REVOKE权限控制,而不是由超级用户检查。

    这些功能被修改:ux_ls_dir(),ux_read_file(),ux_read_binary_file(),ux_stat_file()。

  149. 使用GRANT/REVOKE控制对lo_import()和lo_export()的访问。以前,仅授予超级用户访问这些功能的权限。编译时选项ALLOW_DANGEROUS_LO_FUNCTIONS已被删除。

  150. 防止对uxdb_fdw表进行非密码访问时,使用视图所有者而非会话所有者。

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

  151. 修复SELECT FOR UPDATE视图上无效的锁定权限签入。

  152. 添加服务器设置,ssl_passphrase_command以允许提供SSL密钥文件的密码。

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

  153. 添加存储参数toast_tuple_target以控制最小元组长度,然后再考虑使用TOAST存储。默认的TOAST阈值尚未更改。

  154. 允许以字节为单位指定与内存和文件大小有关的服务器选项。新的单位后缀为“ B ”。这是对现有单位“ kB ”,“ MB ”,“ GB ”和“ TB ”的补充。

  155. 仅保留单个检查点的WAL数据。以前,WAL被保留了两个检查点。

  156. 用零填充强制切换的WAL段文件的未使用部分,以提高可压缩性。

  157. 使用逻辑复制时复制TRUNCATE活动。

  158. 将准备好的事务信息传递给逻辑复制订户。

  159. 从流式基本备份中排除未记录日志的表、临时表和ux_internal.init文件。无需复制此类文件。

  160. 允许在流式基础备份期间验证堆页面的校验和。

  161. 允许通过编程方式高级复制插槽,而不是供订户使用。当不需要使用内容时,这可以使复制插槽有效地前进。这是由ux_replication_slot_advance()执行的。

  162. 将时间线信息添加到backup_label文件中。还要添加一个检查,以确保WAL时间线与backup_label文件的时间线匹配。

  163. 将主机和端口连接信息添加到ux_stat_wal_receiver系统视图。

  164. 允许ALTER TABLE添加具有非空默认值的列,而无需执行表重写。当默认值为常数时启用。

  165. 允许通过锁定基础表来锁定视图。

  166. 允许ALTER INDEX为表达式索引设置统计信息收集目标。在uxsql中,\d+现在显示索引的统计目标。

  167. 允许在一个VACUUMANALYZE命令中指定多个表。此外,如果 VACUUM 中提到的任何表使用列列表,则必须提供 ANALYZE 关键字; 以前,在这种情况下暗示使用 ANALYZE

  168. ANALYZE添加括号选项语法。这类似于所支持的语法VACUUM

  169. 添加CREATE AGGREGATE选项以指定聚合的终结函数的行为。这有助于优化用户定义的聚合函数,并使其成为窗口函数。

  170. 允许创建域数组。这也允许array_agg()在域上使用。

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

  172. 将JSONB标量的类型转换添加到数字和布尔数据类型。

  173. 添加SQL:2011指定的所有窗口函数框架选项。

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

  174. 添加对64位非加密哈希函数的支持。

  175. 允许to_char()并to_timestamp()指定时区与UTC的时差,以小时和分钟为单位。这是用TZH和TZM格式规范完成的。

  176. 添加文本搜索功能websearch_to_tsquery(),该功能支持与Web搜索引擎所使用的查询语法类似的查询语法。

  177. 添加函数json(b)_to_tsvector()以创建文本搜索查询以匹配JSON/JSONB值。

  178. 添加sql级别的过程,它们可以启动和提交自己的事务。

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

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

    此外,在CREATE OPERATORCREATE TRIGGER中编写FUNCTION现在比编写PROCEDURE更受欢迎,因为被引用的对象必须是函数而不是过程。但是,为了兼容性,仍然接受旧的语法。

  179. 将事务控制添加到PL/UXSQL,PL/Perl,PL/Python,PL/Tcl和SPI服务器端语言。

    事务控制只能在顶级事务级过程和嵌套的DOCALL 块中使用,这些DOCALL块只包含其他DOCALL块。

  180. 添加将PL/UXDBSQL复合类型变量定义为非空、常量或初始值的能力。

  181. 允许PL/UXDBSQL处理在同一会话中第一次和以后的函数执行之间发生的对复合类型(例如记录、行)的更改。

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

  182. 添加扩展jsonb_plpython以转换JSONB为PL/Python类型或从PL/Python类型转换。

  183. 添加扩展jsonb_plperl以转换JSONB为PL/Perl类型或从PL/Perl类型转换。

  184. 将libpq更改为默认禁用压缩。在现代OpenSSL版本中,压缩功能已被禁用,因此libpq设置对此类库无效。

  185. DO CONTINUE在ecpg的WHENEVER声明中添加选项。这将生成C continue语句,从而在指定条件发生时返回到包含循环的顶部。

  186. 添加ecpg模式以启用Oracle Pro *C风格的char数组处理。

    这个模式是用-c启用的。

  187. 添加uxsql命令\gdesc以显示查询结果中列的名称和类型。

  188. 添加uxsql变量以报告查询活动和错误。新的变量是ERROR,SQLSTATE,ROW_COUNT,LAST_ERROR_MESSAGE,和LAST_ERROR_SQLSTATE。

  189. 允许uxsql测试变量是否存在。

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

  190. 允许环境变量UXSQL_PAGER控制uxsql的寻呼机。

    这允许将uxsql的默认页导航指定为独立于其他应用程序的页导航环境变量。如果未设置PSQL_PAGER,则仍然使用PAGER。

  191. 允许quit和exit在没有事先输入的情况下退出uxsql。

    还打印有关在输入缓冲区不为空时何时quit和exit在一行上单独使用时如何退出的提示。为添加类似的提示help。

  192. 确保在提示输入密码时,uxsql报告正确的用户名。

    以前,嵌入在URI中的-u和用户名的组合导致了错误的报告。当指定--password时,还要在密码提示符前禁止显示用户名。

  193. 当仅在一行中输入\q但忽略时,使用control-D进行uxsql提示。例如,\q以字符串形式输入时不退出。

  194. 改进ALTER INDEX RESET/SET的制表符完成。

  195. 添加基础结构以允许uxsql根据服务器版本调整其制表符完成查询。以前,选项卡补全查询可能会针对较旧的服务器失败。

  196. 添加对NULL,布尔值以及某些函数和运算符的uxbench表达式支持。

  197. 添加if条件支持uxbench。

  198. 允许在uxbench变量名称中使用非ASCII字符。

  199. 添加uxbench选项--init-steps以控制执行的初始化步骤。

  200. 在uxbench中添加一个近似zipfian分布式随机生成器。

  201. 允许在uxbench中设置随机种子。

  202. 允许uxbench使用pow()和power()进行求幂运算。

  203. 将哈希函数添加到uxbench。

  204. 在使用-- latency-limit和-- rate时,使uxbench统计数据更加准确。

  205. 在ux_basebackup中添加一个选项,以创建一个命名的复制槽。

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

  206. 允许initdb设置对数据目录的组读取访问权限。

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

  207. 添加ux_verify_checksums工具以在脱机时验证数据库校验和。

  208. 允许ux_resetwal通过--wal-segsize改变WAL段的大小。

  209. 向ux_resetwal和ux_controldata添加长选项。

  210. 添加ux_receivewal选项--no-sync以防止同步WAL写操作,以进行测试。

  211. 添加ux_receivewal选项--endpos以指定应该何时停止接收WAL。

  212. 允许ux_ctl向进程发送SIGKILL信号。由于担心滥用,以前不提供支持。

  213. 减少ux_rewind复制的文件数量。

  214. 阻止ux_rewind以root身份运行。

  215. 添加ux_dumpall选项--encoding以控制输出编码。ux_dump已经有了这个选项。

  216. 添加ux_dump选项--load-via-partition-root以强制将数据加载到分区的根表中,而不是原始分区中。

    如果要加载到的系统具有不同的排序规则定义或字节序,可能需要将行存储在不同的分区中,那么这种方法很有用。

  217. 添加一个选项以禁止转储和还原数据库对象注。新的ux_dump,ux_dumpall和ux_restore选项为--no-comments。

  218. 添加UXXS支持安装包含文件。

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

  219. 安装errcodes.txt以允许扩展访问UxdbSQL已知的错误代码列表。

  220. 将文档转换为DocBook XML。文件名仍使用sgml扩展名与后分支兼容。

  221. 使用stdoutbool.h在最适合的平台上定义bool类型。这消除了需要包含的扩展模块的编码风险stdbool.h。

  222. 检修定义初始系统目录内容的方式。现在,初始数据以Perl数据结构表示,从而更容易进行机械操作。

  223. 防止扩展程序创建使用值的引号列表的自定义服务器参数。目前尚不支持此功能,因为即使在加载扩展之前,也需要了解参数的属性。

  224. 允许后台工作人员连接到通常禁止连接的数据库。

  225. 在ARMv8上添加对硬件CRC计算的支持。

  226. 通过OID加快对内置函数的查找。先前的二进制搜索已由查找数组代替。

  227. 加快查询结果的构建。

  228. 提高访问系统缓存的速度。

  229. 添加针对串行分配/取消分配进行了优化的分代内存分配器。这减少了逻辑解码的内存使用量。

  230. 进行的计算ux_clas.reltuples通过VACUUMANALYZE的计算一致。

  231. 更新以使用完美版本20170521。

  232. 允许扩展ux_prewarm在启动时还原以前的共享缓冲区内容。

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

  233. 添加ux_trgm函数strict_word_similarity()以计算整个单词的相似度。

    word_similarity()功能已经存在,但它旨在查找单词的相似部分,同时strict_word_similarity()计算与整个单词的相似度。

  234. 允许btree_gin索引bool,bpchar,name和uuid数据类型。

  235. 允许cube和seg扩展使用GiST索引执行仅索引扫描。

  236. 允许使用~>运算符检索立方负坐标。在按降序查找坐标时,这对于KNN-GiST搜索很有用。

  237. 将越南文字处理添加到unaccent扩展名中。

  238. 增强amcheck以检查每个堆元组都有一个索引项。

  239. 让adminpack使用新的默认文件系统访问角色。以前,只有超级用户可以调用adminpack函数; 现在检查角色权限。

  240. 将ux_stat_statement查询ID扩展为64位。这大大减少了查询ID哈希冲突的机会。现在,查询ID可能会显示为负值。

  241. 删除contrib/start-scripts/osx脚本,因为不再推荐使用它们(改为使用contrib/start-scripts/macos)。

  242. 删除chkpass扩展名。此扩展不再被视为可用的安全工具或如何编写扩展的示例。

不兼容性

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

  1. 不支持列存特性。

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

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

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

  3. 删除数据类型abstime,reltime和tinterval。这些已被SQL标准类型(例如:淘汰timestamp)。

  4. 删除timetravel扩展名。

  5. 将recovery.conf设置移至uxsinodb.conf。

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

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

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

  7. 默认情况下,导致恢复前进到最新时间线。具体来说,recovery_target_timeline现在默认为latest。以前,它默认为current。

  8. 几何函数和运算符的代码重构。与以前的版本相比,这可能会导致结果更准确,但略有不同。值得注意的是,涉及NaN,下溢,溢出和被零除的情况比以前处理得更加一致。

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

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

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

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

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

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

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

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

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

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

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

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

  15. 在uxsql的pset format命令中禁止非唯一缩写。例如,以前pset formata chose aligned;现在它将失败,因为这同样意味着asciidoc。

  16. 在新的btree索引中,最大索引条目长度减少了八个字节,以改善重复条目的处理。这意味着对先前版本的索引ux_upgradeREINDEX操作可能会失败。

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

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

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

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

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

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

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

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

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

  22. 删除禁用动态共享内存的功能。具体来说,dynamic_shared_memory_type不能再设置为none。

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

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

  24. 使ux_dump转储数据库的属性,而不仅仅是其内容。

    以前,数据库本身的属性(例如数据库级别GRANT/ REVOKE权限和ALTER DATABASE SET变量设置)仅由ux_dumpall转储。现在ux_dump --createux_restore --create除了数据库中的对象之外,还将还原这些数据库属性。ux_dumpall -g现在仅转储与角色和表空间相关的属性。ux_dumpall的完整输出(不带-g)保持不变。

    ux_dumpux_restore,不带--create,不再转储/恢复数据库级注释和安全标签;这些现在被视为数据库的属性。

    ux_dumpall的输出脚本现在将始终使用原始语言环境和编码来创建数据库,因此,如果目标系统不知道该语言环境或编码名称,则该脚本将失败。以前,CREATE DATABASE如果数据库的语言环境和编码与旧集群的默认值匹配,则将在没有这些规范的情况下被发出。

    ux_dumpall --clean现在可以恢复uxdb和template1数据库的原始区域设置和编码设置,以及用户创建的数据库的区域设置和编码设置。

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

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

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

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

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

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

  29. 修复to_date(),to_number()和to_timestamp()跳过每个模板字符的字符。以前,每个模板字符跳过一个字节,如果其中一个字符串包含多字节字符,就会产生奇怪的行为。

  30. 调整模板字符串中双引号内的反斜杠的处理,分别为to_char(),to_number()和to_timestamp()。现在,这样的反斜杠会将字符后的字符转义,特别是双引号或其他反斜杠。

  31. 正确处理xmltable()、xpath()和其他xml处理函数中的相对路径表达式。根据SQL标准,相对路径从 XML 输入文档的文档节点开始,而不是像以前的函数那样从根节点开始。

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

  33. 从系统目录ux_class中删除relhaspkey列。需要检查主键的应用程序应该参考ux_index。

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

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

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

    这个新输出符合SQL标准。

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

  37. 导致在打开大对象的过程中进行大对象权限检查lo_open(),而不是在尝试进行读取或写入时发生。如果请求写访问权限且该写访问权限不可用,则即使从不写入大对象,现在也会引发错误。

  38. 防止非超级用户重新索引共享目录。以前,也允许数据库所有者执行此操作,但是现在,数据库所有者被认为超出了他们的权限范围。

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

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

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

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

  41. 删除服务器参数replacement_sort_tuple。确定替换种类不再有用。

  42. 删除CREATE FUNCTION中的WITH子句。长期以来,UXDB一直支持更符合标准的语法。

  43. 在PL/UXSQL触发函数中,当未分配时,OLD和NEW变量现在读为NULL。以前,可以解析但不执行对这些变量的引用。

v2.1.0.4

改进点

  1. 增加列式存储功能

    用于提高数据的读取效率,高效压缩,降低磁盘存储,对大量数据进行分析,适用于OLAP场景。