华为云用户手册

  • GaussDB 权限 默认情况下,管理员创建的 IAM 用户没有任何权限,需要将其加入用户组,并给用户组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。授权后,用户就可以基于被授予的权限对云服务进行操作。 GaussDB部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权限在所有区域项目中都生效。访问GaussDB时,需要先切换至授权区域。 根据授权精细程度分为角色和策略。 角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达到企业对权限最小化的安全管控要求。 策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业对权限最小化的安全管控要求。例如:针对GaussDB服务,管理员能够控制IAM用户仅能对某一类数据库资源进行指定的管理操作。多数细粒度策略以API接口为粒度进行权限拆分,GaussDB支持的API授权项请参见策略及授权项说明 。 如表1所示,包括了GaussDB的所有系统权限。 表1 GaussDB系统权限 策略名称 描述 类别 依赖配置 GaussDB FullAccess 云数据库GaussDB服务的所有执行权限。 系统策略 如果要使用存储空间自动扩容、委托权限整改功能,IAM子账号需要添加如下授权项: 创建自定义策略: iam:agencies:listAgencies iam:agencies:createAgency iam:permissions:listRolesForAgencyOnProject iam:permissions:grantRoleToGroupOnProject iam:roles:listRoles iam:permissions:listRolesForAgencyOnDomain iam:permissions:revokeRoleFromAgencyOnProject iam:permissions:revokeRoleFromAgencyOnDomain 添加系统角色:Security Administrator 选择该用户所在的一个用户组。 单击“授权”。 添加Security Administrator系统角色。 创建 RAM 共享KMS密钥的包周期实例,依赖IAM权限点: iam:agencies:listAgencies iam:roles:listRoles iam:agencies:pass iam:agencies:createAgency iam:permissions:grantRoleToAgency 其中GaussDB FullAccess已包含iam:agencies:listAgencies、iam:roles:listRoles、iam:agencies:pass权限。 由于GaussDB 是Region级服务,而IAM是Global级服务,将GaussDB FullAccess授权给项目时,需要再授权BSS ServiceAgencyReadPolicy(全局级服务);如果将GaussDB FullAccess授权给全部项目,可正常使用IAM权限。 BSS ServiceAgencyCreatePolicy包含其他操作权限:iam:agencies:createAgency、iam:permissions:grantRoleToAgency。 GaussDB ReadOnlyAccess 云数据库GaussDB服务的只读访问权限。 系统策略 无。 表2列出了GaussDB常用操作与系统权限的授权关系,您可以参照该表选择合适的系统权限。 表2 常用操作与系统权限的关系 操作 GaussDB FullAccess GaussDB ReadOnlyAccess 创建GaussDB实例 √ x 删除GaussDB实例 √ x 查询GaussDB实例列表 √ √ 表3 常用操作与对应授权项 操作名称 授权项 备注 创建数据库实例 gaussdb:instance:create gaussdb:param:list 界面选择VPC、子网、安全组需要配置: vpc:vpcs:list vpc:vpcs:get vpc:subnets:get vpc:securityGroups:get 创建包周期实例需要配置 bss:order:update bss:order:view bss:balance:view 创建加密实例需要在项目上配置: kms:cmk:get kms:cmk:list 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 规格变更 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 扩容节点 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 磁盘扩容 gaussdb:instance:modifySpec 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 重启数据库实例 gaussdb:instance:restart 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 删除数据库实例 gaussdb:instance:delete 退订包周期实例需要配置: "bss:unsubscribe:update" 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 查询数据库实例列表 gaussdb:instance:list 无 实例详情 gaussdb:instance:list 实例详情界面展示VPC、子网、安全组,需要对应配置vpc:*:get和vpc:*:list。显示磁盘已使用大小,需要配置ces:*:list。 修改数据库实例密码 gaussdb:instance:modify 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 修改实例名称 gaussdb:instance:modify 无 绑定/解绑公网IP gaussdb:instance:modify 界面列出公网IP需要配置: vpc:publicIps:get vpc:publicIps:list 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 创建参数模板 gaussdb:param:create gaussdb:param:list 无 修改参数模板 gaussdb:param:modify 无 获取参数模板列表 gaussdb:param:list 无 应用参数模板 gaussdb:param:apply 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create 删除参数模板 gaussdb:param:delete 无 创建手动备份 gaussdb:backup:create 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 获取备份列表 gaussdb:backup:list 无 修改备份策略 gaussdb:instance:modifyBackupPolicy 无 删除手动备份 gaussdb:backup:delete 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create" 恢复到新实例 gaussdb:instance:create 界面选择VPC、子网、安全组需要配置: vpc:vpcs:list vpc:vpcs:get vpc:subnets:get vpc:securityGroups:get 操作失败上报事件监控需要配置: "ces:alarmsOnOff:put" "ces:alarms:create 查询项目标签 gaussdb:tag:list 无 批量添加删除项目标签 gaussdb:instance:dealTag 无 修改配额 gaussdb:quota:modify 无 查询预定义标签 gaussdb:instance:list 查询预定义标签需要配置: tms:resourceTags:list 查询配置日志组 - 查询配置日志组需要配置: lts:groups:get 查询配置日志流 - 查询配置日志流需要配置: lts:topics:get 存储空间自动扩容 gaussdb:instance:autoEnlargePolicy 如果选择自动扩容,IAM主账号(原华为账号)不需要添加授权项,IAM子账号需要添加如下IAM授权项: iam:agencies:listAgencies iam:agencies:createAgency iam:permissions:listRolesForAgencyOnProject iam:permissions:grantRoleToGroupOnProject iam:roles:listRoles iam:permissions:listRolesForAgencyOnDomain iam:permissions:revokeRoleFromAgencyOnProject iam:permissions:revokeRoleFromAgencyOnDomain 添加系统角色:Security Administrator 选择该用户所在的一个用户组。 单击“授权”。 添加Security Administrator系统角色。 查询高级特性 gaussdb:instance:listFeatures 无 开启高级特性 gaussdb:instance:updateFeatures 无
  • 标识符 M-Compatibility模式下标识符存在以下差异: GaussDB无引号标识符中不支持以美元符号($)开头,MySQL无引号标识符中支持。 GaussDB无引号标识符中的支持大小写敏感的数据库对象。 GaussDB标识符支持U+0080~U+00FF扩展字符,MySQL标识符支持U+0080~U+FFFF的扩展字符。 无引号标识符中,GaussDB不支持创建以数字开头包含一个e或E结尾作为标识符的表,例如: -- GaussDB报错不支持,MySQL支持 m_db=# CREATE TABLE 23e(c1 int); ERROR: syntax error at or near "23" LINE 1: CREATE TABLE 23e(c1 int); ^ m_db=# CREATE TABLE t1(23E int); ERROR: syntax error at or near "23" LINE 1: CREATE TABLE t1(23E int); ^ 有引号标识符中,GaussDB对于创建了列名为纯数字或科学计算法的表,不支持直接使用,需要在引号中使用;对于点操作符(.)场景,列名为纯数字或科学计算法的表也需要在引号中使用。例如: -- 创建列名为纯数字或科学计算法的表 m_db=# CREATE TABLE t1(`123` int, `1e3` int, `1e` int); CREATE TABLE -- 向表中插入数据 m_db=# INSERT INTO t1 VALUES(7, 8, 9); INSERT 0 1 -- 结果非预期,但与MySQL结果一致 m_db=# SELECT 123 FROM t1; ?column? ---------- 123 (1 row) -- 结果非预期,但与MySQL结果一致 m_db=# SELECT 1e3 FROM t1; ?column? ---------- 1000 (1 row) -- 结果非预期,并且与MySQL结果不一致 m_db=# SELECT 1e FROM t1; e --- 1 (1 row) -- 正确用法 m_db=# SELECT `123` FROM t1; 123 ----- 7 (1 row) m_db=# SELECT `1e3` FROM t1; 1e3 ----- 8 (1 row) m_db=# SELECT `1e` FROM t1; 1e ---- 9 (1 row) -- 点操作符的场景,GaussDB不支持,MySQL支持 m_db=# SELECT t1.123 FROM t1; ERROR: syntax error at or near ".123" LINE 1: SELECT t1.123 FROM t1; ^ m_db=# SELECT t1.1e3 FROM t1; ERROR: syntax error at or near "1e3" LINE 1: SELECT t1.1e3 FROM t1; ^ m_db=# SELECT t1.1e FROM t1; ERROR: syntax error at or near "1" LINE 1: SELECT t1.1e FROM t1; ^ -- 点操作符的场景,正确用法: m_db=# SELECT t1.`123` FROM t1; 123 ----- 7 (1 row) m_db=# SELECT t1.`1e3` FROM t1; 1e3 ----- 8 (1 row) m_db=# SELECT t1.`1e` FROM t1; 1e ---- 9 (1 row) m_db=# DROP TABLE t1; DROP TABLE GaussDB分区名使用双引号(需要设置SQL_MODE为ANSI_QUOTES)或反引号是区分大小写的,MySQL不区分。 MySQL标识符长度限制为64,而GaussDB标识符长度限制为63。 GaussDB不支持可执行注释。 父主题: SQL
  • 分层查询运算符 表5 分层查询运算符 序号 Oracle数据库 GaussDB数据库 差异 1 prior 支持,有差异 GaussDB中仅支持对普通列调用,不支持对函数等调用。 2 connect_by_root 支持,有差异 GaussDB中,connect_by_root调用时,用括号修饰操作值时,行为与Oracle一致;不使用括号时,仅支持对普通列调用此运算符。 3 connect_by_iscycle 支持,有差异 GaussDB中可以单独使用,Oracle中必须搭配NOCYCLE一起使用。 4 start with,connect by,level 支持,有差异 GaussDB中start with,connect by,level可以作为列别名,Oracle不支持。 5 start with 支持,有差异 GaussDB中start with后面支持空字符查询,查询结果为空,支持对伪列的操作;Oracle会抛出异常。 6 connect by 支持,有差异 GaussDB中connect by支持对NULL值操作,Oracle会抛出异常。
  • 数据库实例产品类型 云数据库GaussDB提供基础版和企业版两种产品类型。主要区别在于,企业版提供多项高级特性,包括高级压缩、防篡改、动态数据脱敏、多租和透明加密。此外,企业版将持续引入新的高级特性,而这些新的高级特性不会应用于基础版。基础版的定位为GaussDB性价比版本,对高级特性做了裁剪,相比企业版性能相当但价格更低,主要面向价格敏感且对高级特性无诉求的用户。 基础版和企业版的具体差异请参见表1。 表1 GaussDB基础版和企业版的差异 产品类型 GaussDB基础版 GaussDB企业版 支持的实例类型 集中式版 分布式版 集中式版 分布式版 支持的部署形态 集中式版 1主2备 1主1备1日志 单副本 分布式版 混合部署 集中式版 1主2备 1主1备1日志 单副本 分布式版 独立部署 支持的性能规格 支持的规格类型: 通用型 独享型 鲲鹏独享型 支持的规格类型: 独享型 鲲鹏独享型 支持的最小规格: 集中式版 4U16G(通用型、独享型、鲲鹏独享型) 分布式版 混合部署:16U64G(独享型、鲲鹏独享型) 说明: 由于混合部署所有组件部署在同一台E CS 上,需要更多CPU以保证性能,因此混合部署的规格为16U起步。 支持的最小规格: 集中式版 4U16G(独享型、鲲鹏独享型) 分布式版 独立部署:8U64G(独享型、鲲鹏独享型) 支持的最大规格: X86:64U512G ARM:60U480G 支持的最大规格: X86:64U512G ARM:60U480G 高级特性 不支持高级压缩、防篡改、动态数据脱敏、多租、透明加密 支持全部高级特性 性能对比 (以企业版为基准) 集中式版:与企业版性能持平 分布式版混合部署:同规格情况下,基础版分布式混合部署性能约为企业版分布式独立部署的50% - 价格对比 (以企业版为基准) 同规格情况下,基础版集中式的价格约为企业版集中式价格的30% 同规格情况下,基础版分布式混合部署的价格约为企业版分布式独立部署价格的7.5% -
  • 集中式版 GaussDB集中式版逻辑架构图如下: 图4 集中式版逻辑架构图 集中式版实例支持的部署形态: 1主2备 1主2备采用一主两备三节点的部署模式,包含一个分片,架构图如图5所示。仅集中式版实例可选。该形态不具备可扩展性。适用于数据量较小,且长期来看数据不会大幅度增长,但是对数据的可靠性,以及业务的可用性有一定诉求的场景。 DN主备任意一个节点故障部署,不影响业务的进行。 1主2备形态支持以下两种部署方式。 3副本,单AZ 3副本,3AZ 图5 1主2备架构图 1主1备1日志 采用一主一备一日志三节点的部署模式,包含一个分片,三个副本。仅集中式版实例可选。架构图如图6所示。 图6 1主1备1日志架构图 单副本 采用单节点的部署模式,仅包含一个CMS和一个DN组件。仅集中式版实例可选。架构图如图7所示。 图7 单副本架构图
  • 分布式版 GaussDB分布式版逻辑架构图如下: 图1 分布式版逻辑架构图 分布式版实例支持的部署形态: 独立部署 独立部署模式下,是将数据库每个组件独立部署在不同的服务器上,即每个CN、DN占用一个VM,互相之间资源隔离。以默认配置(3CN,3副本,3分片)为例,独立部署模式有3个CN,9个DN,总计12个节点,因此独立部署费用也会相对较高。架构图如图2所示。独立部署形态适用于可靠性、稳定性要求较高,实例规模较大的场景。 图2 独立部署架构图 混合部署 混合部署模式下,是将数据库多个组件部署在同一个服务器上,以默认配置(3CN,3DN)为例,一个CN和三个DN共同占用一个VM,共3个节点。架构图如图3所示。仅基础版的分布式版实例可选。基础版相对于企业版有较低的价格,适合对性能要求不高、对成本敏感的用户。 图3 混合部署架构图
  • 日期和时间函数 以下为GaussDB M-Compatibility兼容性日期时间函数公共说明。 《M-Compatibility开发指南》中“函数和操作符”章节函数入参为时间类型表达式的情况: 时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。 生效的情况根据函数有所不同,比如:DATEDIFF函数由于只计算日期的差值,所以时间表达式会当做日期来解析。TIMESTAMPDIFF函数由于计算时间差值时是根据UNIT来决定的,所以会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。 当SELECT子查询中包含且仅包含时间函数,且函数入参包含表中的列时,使用算数运算符(如+、-、*、/、取反等)对结果进行运算时,会截断日期与时间函数返回值后再进行算数运算。 m_db=# CREATE TABLE t1(int_var int); CREATE TABLE m_db=# INSERT INTO t1 VALUES(100); INSERT 0 1 m_db=# SELECT (SELECT (1 * DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 不进行截断处理。 a ---------------- 20201020000000 (1 row) m_db=# SELECT (1 * (SELECT DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 进行截断处理。 a ------ 2020 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT 1 * DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 不进行截断处理。 1 * a ---------------- 20201020000000 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 进行截断处理。 1 * a ------- 2020 (1 row) 函数入参为无效日期的情况: 一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。 大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。 新框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示: 表1 日期与和时间函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 ADDDATE() 支持 - 2 ADDTIME() 支持 - 3 CONVERT_TZ() 支持 - 4 CURDATE() 支持 - 5 CURRENT_DATE()/CURRENT_DATE 支持 - 6 CURRENT_TIME()/CURRENT_TIME 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 7 CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 8 CURTIME() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 9 DATE() 支持 - 10 DATE_ADD() 支持 - 11 DATE_FORMAT() 支持 - 12 DATE_SUB() 支持 - 13 DATEDIFF() 支持 - 14 DAY() 支持 - 15 DAYNAME() 支持 - 16 DAYOFMONTH() 支持 - 17 DAYOFWEEK() 支持 - 18 DAYOFYEAR() 支持 - 19 EXTRACT() 支持 - 20 FROM_DAYS() 支持 - 21 FROM_UNIXTIME() 支持 - 22 GET_FORMAT() 支持 - 23 HOUR() 支持 - 24 LAST_DAY() 支持 - 25 LOCALTIME()/LOCALTIME 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 26 LOCALTIMESTAMP/LOCALTIMESTAMP() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 27 MAKEDATE() 支持 - 28 MAKETIME() 支持 - 29 MICROSECOND() 支持 - 30 MINUTE() 支持 - 31 MONTH() 支持 - 32 MONTHNAME() 支持 - 33 NOW() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。 GaussDB只支持[0,6]合法值,其他值报错。 34 PERIOD_ADD() 支持,有差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题。GaussDB下此函数的表现与MySQL8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题。GaussDB下此函数的表现与MySQL8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 35 PERIOD_DIFF() 支持,有差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参结果最大值为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL8.0中已修复此问题。GaussDB下此函数的表现与MySQL8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL8.0版本保持一致。 36 QUARTER() 支持 - 37 SEC_TO_TIME() 支持 - 38 SECOND() 支持 - 39 STR_TO_DATE() 支持 返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。 40 SUBDATE() 支持 - 41 SUBTIME() 支持 - 42 SYSDATE() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕。 GaussDB不回绕。 43 TIME() 支持 - 44 TIME_FORMAT() 支持 - 45 TIME_TO_SEC() 支持 - 46 TIMEDIFF() 支持 - 47 TIMESTAMP() 支持 - 48 TIMESTAMPADD() 支持 - 49 TIMESTAMPDIFF() 支持 - 50 TO_DAYS() 支持 - 51 TO_SECONDS() 支持 在MySQL 5.7版本中,此函数的精度信息有误。 开启精度传递参数下,GaussDB精度信息正常,和MySQL 8.0版本保持一致。 52 UNIX_TIMESTAMP() 支持 MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括DATE类型)时,MySQL可能返回整型,GaussDB会返回定点型。 53 UTC_DATE() 支持 - 54 UTC_TIME() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 55 UTC_TIMESTAMP() 支持,有差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 56 WEEK() 支持 - 57 WEEKDAY() 支持 - 58 WEEKOFYEAR() 支持 - 59 YEAR() 支持 - 60 YEARWEEK() 支持 - 父主题: 系统函数
  • 系统视图 GaussDB数据库兼容了部分Oracle数据库的系统视图,兼容的详细列表如下。 更多系统视图的字段说明信息请参考《开发指南》中“系统视图”章节。 表1 支持视图列表 序号 Oracle数据库 GaussDB数据库 1 ALL_ALL_TABLES DB_ALL_TABLES 2 ALL_COL_PRIVS DB_COL_PRIVS 3 ALL_COLL_TYPES DB_COLL_TYPES 4 ALL_ERRORS DB_ERRORS 5 ALL_IND_COLUMNS DB_IND_COLUMNS 6 ALL_COL_COMMENTS DB_COL_COMMENTS 7 ALL_CONS_COLUMNS DB_CONS_COLUMNS 8 ALL_CONSTRAINTS DB_CONSTRAINTS 9 ALL_DEPENDENCIES DB_DEPENDENCIES 10 ALL_DIRECTORIES DB_DIRECTORIES 11 ALL_IND_EXPRESSIONS DB_IND_EXPRESSIONS 12 ALL_IND_PARTITIONS DB_IND_PARTITIONS 13 ALL_INDEXES DB_INDEXES 14 ALL_IND_SUBPARTITIONS DB_IND_SUBPARTITIONS 15 ALL_OBJE CTS DB_OBJECTS 16 ALL_PART_COL_STATIS TICS DB_PART_COL_STATISTICS 17 ALL_PART_KEY_COLUMNS DB_PART_KEY_COLUMNS 18 ALL_PART_TABLES DB_PART_TABLES 19 ALL_SCHEDULER_JOB_ARGS DB_SCHEDULER_JOB_ARGS 20 ALL_SCHEDULER_PROGRAM_ARGS DB_SCHEDULER_PROGRAM_ARGS 21 ALL_SEQUEN CES DB_SEQUENCES 22 ALL_SUBPART_COL_STATISTICS DB_SUBPART_COL_STATISTICS 23 ALL_SUBPART_KEY_COLUMNS DB_SUBPART_KEY_COLUMNS 24 ALL_SYNONYMS DB_SYNONYMS 25 ALL_TAB_COL_STATISTICS DB_TAB_COL_STATISTICS 26 ALL_TAB_COMMENTS DB_TAB_COMMENTS 27 ALL_TAB_HISTOGRAMS DB_TAB_HISTOGRAMS 28 ALL_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY 29 ALL_TYPES DB_TYPES 30 ALL_PART_INDEXES DB_PART_INDEXES 31 ALL_PROCEDURES DB_PROCEDURES 32 ALL_SOURCE DB_SOURCE 33 ALL_TAB_COLUMNS DB_TAB_COLUMNS 34 ALL_TAB_PARTITIONS DB_TAB_PARTITIONS 35 ALL_TAB_SUBPARTITIONS DB_TAB_SUBPARTITIONS 36 ALL_TABLES DB_TABLES 37 ALL_TRIGGERS DB_TRIGGERS 38 ALL_USERS DB_USERS 39 ALL_VIEWS DB_VIEWS 40 DBA_AUDIT_OBJECT ADM_AUDIT_OBJECT 41 DBA_AUDIT_SESSION ADM_AUDIT_SESSION 42 DBA_AUDIT_STATEMENT ADM_AUDIT_STATEMENT 43 DBA_AUDIT_TRAIL ADM_AUDIT_TRAIL 44 DBA_COL_COMMENTS ADM_COL_COMMENTS 45 DBA_COL_PRIVS ADM_COL_PRIVS 46 DBA_COLL_TYPES ADM_COLL_TYPES 47 DBA_ARGUMENTS ADM_ARGUMENTS 48 DBA_CONSTRAINTS ADM_CONSTRAINTS 49 DBA_DATA_FILES ADM_DATA_FILES 50 DBA_CONS_COLUMNS ADM_CONS_COLUMNS 51 DBA_DEPENDENCIES ADM_DEPENDENCIES 52 DBA_DIRECTORIES ADM_DIRECTORIES 53 DBA_PART_COL_STATISTICS ADM_PART_COL_STATISTICS 54 DBA_PART_TABLES ADM_PART_TABLES 55 DBA_RECYCLEBIN ADM_RECYCLEBIN 56 DBA_ROLE_PRIVS ADM_ROLE_PRIVS 57 DBA_ROLES ADM_ROLES 58 DBA_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARGS 59 DBA_SCHEDULER_PROGRAMS ADM_SCHEDULER_PROGRAMS 60 DBA_SCHEDULER_PROGRAM_ARGS ADM_SCHEDULER_PROGRAM_ARGS 61 DBA_HIST_SNAPSHOT ADM_HIST_SNAPSHOT 62 DBA_HIST_SQL_PLAN ADM_HIST_SQL_PLAN 63 DBA_HIST_SQLSTAT ADM_HIST_SQLSTAT 64 DBA_HIST_SQLTEXT ADM_HIST_SQLTEXT 65 DBA_ILMDATAMOVEMENTPOLICIES GS_ADM_ILMDATAMOVEMENTPOLICIES 66 DBA_ILMEVALUATIONDETAILS GS_ADM_ILMEVALUATIONDETAILS 67 DBA_ILMOBJECTS GS_ADM_ILMOBJECTS 68 DBA_ILMPARAMETERS GS_ADM_ILMPARAMETERS 69 DBA_ILMPOLICIES GS_ADM_ILMPOLICIES 70 DBA_ILMRESULTS GS_ADM_ILMRESULTS 71 DBA_ILMTASKS GS_ADM_ILMTASKS 72 DBA_IND_COLUMNS ADM_IND_COLUMNS 73 DBA_IND_EXPRESSIONS ADM_IND_EXPRESSIONS 74 DBA_IND_PARTITIONS ADM_IND_PARTITIONS 75 DBA_INDEXES ADM_INDEXES 76 DBA_OBJECTS ADM_OBJECTS 77 DBA_PART_INDEXES ADM_PART_INDEXES 78 DBA_PROCEDURES ADM_PROCEDURES 79 DBA_SCHEDULER_JOBS ADM_SCHEDULER_JOBS 80 DBA_SCHEDULER_RUNNING_JOBS ADM_SCHEDULER_RUNNING_JOBS 81 DBA_SEGMENTS ADM_SEGMENTS 82 DBA_SEQUENCES ADM_SEQUENCES 83 DBA_SOURCE ADM_SOURCE 84 DBA_IND_SUBPARTITIONS ADM_IND_SUBPARTITIONS 85 DBA_SUBPART_COL_STATISTICS ADM_SUBPART_COL_STATISTICS 86 DBA_SUBPART_KEY_COLUMNS ADM_SUBPART_KEY_COLUMNS 87 DBA_SYS_PRIVS ADM_SYS_PRIVS 88 DBA_TAB_COL_STATISTICS ADM_TAB_COL_STATISTICS 89 DBA_TAB_HISTOGRAMS ADM_TAB_HISTOGRAMS 90 DBA_TAB_STATISTICS ADM_TAB_STATISTICS 91 DBA_TAB_STATS_HISTORY ADM_TAB_STATS_HISTORY 92 DBA_TABLESPACES ADM_TABLESPACES 93 DBA_TYPES ADM_TYPES 94 DBA_USERS ADM_USERS 95 DBA_SYNONYMS ADM_SYNONYMS 96 DBA_TAB_COLS ADM_TAB_COLS 97 DBA_TAB_COLUMNS ADM_TAB_COLUMNS 98 DBA_TAB_COMMENTS ADM_TAB_COMMENTS 99 DBA_TABLES ADM_TABLES 100 DBA_TAB_PARTITIONS ADM_TAB_PARTITIONS 101 DBA_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS 102 DBA_TRIGGERS ADM_TRIGGERS 103 DBA_TYPE_ATTRS ADM_TYPE_ATTRS 104 DBA_VIEWS ADM_VIEWS 105 ROLE_ROLE_PRIVS ROLE_ROLE_PRIVS 106 ROLE_SYS_PRIVS ROLE_SYS_PRIVS 107 ROLE_TAB_PRIVS ROLE_TAB_PRIVS 108 USER_COL_COMMENTS MY_COL_COMMENTS 109 USER_COL_PRIVS MY_COL_PRIVS 110 USER_COLL_TYPES MY_COLL_TYPES 111 USER_CONSTRAINTS MY_CONSTRAINTS 112 USER_DEPENDENCIES MY_DEPENDENCIES 113 DICT DICT 114 DICTIONARY DICTIONARY 115 DUAL DUAL 116 NLS_DATABASE_PARAMETERS NLS_DATABASE_PARAMETERS 117 NLS_INSTANCE_PARAMETERS NLS_INSTANCE_PARAMETERS 118 PLAN_TABLE PLAN_TABLE 119 USER_ERRORS MY_ERRORS 120 USER_ILMDATAMOVEMENTPOLICIES GS_MY_ILMDATAMOVEMENTPOLICIES 121 USER_ILMEVALUATIONDETAILS GS_MY_ILMEVALUATIONDETAILS 122 USER_ILMOBJECTS GS_MY_ILMOBJECTS 123 USER_ILMPOLICIES GS_MY_ILMPOLICIES 124 USER_ILMRESULTS GS_MY_ILMRESULTS 125 USER_ILMTASKS GS_MY_ILMTASKS 126 USER_IND_COLUMNS MY_IND_COLUMNS 127 USER_IND_EXPRESSIONS MY_IND_EXPRESSIONS 128 USER_IND_PARTITIONS MY_IND_PARTITIONS 129 USER_IND_SUBPARTITIONS MY_IND_SUBPARTITIONS 130 USER_INDEXES MY_INDEXES 131 USER_JOBS MY_JOBS 132 USER_OBJECTS MY_OBJECTS 133 USER_PART_COL_STATISTICS MY_PART_COL_STATISTICS 134 USER_PART_INDEXES MY_PART_INDEXES 135 USER_PART_TABLES MY_PART_TABLES 136 USER_PROCEDURES MY_PROCEDURES 137 USER_RECYCLEBIN MY_RECYCLEBIN 138 USER_SCHEDULER_JOB_ARGS MY_SCHEDULER_JOB_ARGS 139 USER_SCHEDULER_PROGRAM_ARGS MY_SCHEDULER_PROGRAM_ARGS 140 USER_SEQUENCES MY_SEQUENCES 141 USER_SOURCE MY_SOURCE 142 USER_SUBPART_KEY_COLUMNS MY_SUBPART_KEY_COLUMNS 143 USER_SYNONYMS MY_SYNONYMS 144 USER_SYS_PRIVS MY_SYS_PRIVS 145 USER_TAB_COL_STATISTICS MY_TAB_COL_STATISTICS 146 USER_TAB_COLUMNS MY_TAB_COLUMNS 147 USER_TAB_COMMENTS MY_TAB_COMMENTS 148 USER_TAB_HISTOGRAMS MY_TAB_HISTOGRAMS 149 USER_TAB_PARTITIONS MY_TAB_PARTITIONS 150 USER_TAB_STATISTICS MY_TAB_STATISTICS 151 USER_TAB_STATS_HISTORY MY_TAB_STATS_HISTORY 152 USER_TAB_SUBPARTITIONS MY_TAB_SUBPARTITIONS 153 USER_TABLES MY_TABLES 154 USER_TABLESPACES MY_TABLESPACES 155 USER_TRIGGERS MY_TRIGGERS 156 USER_TYPE_ATTRS MY_TYPE_ATTRS 157 USER_TYPES MY_TYPES 158 USER_VIEWS MY_VIEWS 159 V$GLOBAL_TRANSACTION V$GLOBAL_TRANSACTION 160 V$NLS_PARAMETERS V$NLS_PARAMETERS 161 V$SESSION_WAIT V$SESSION_WAIT 162 V$SYSSTAT V$SYSSTAT 163 V$SYSTEM_EVENT V$SYSTEM_EVENT 164 V$VERSION V$VERSION 165 V$INSTANCE V_INSTANCE 166 GV$INSTANCE GV_INSTANCE 167 V$MYSTAT V_MYSTAT 168 V$SESSION V_SESSION 169 GV$SESSION GV_SESSION 170 V$SESSION_LONGOPS DV_SESSION_LONGOPS 171 V$SESSION DV_SESSIONS 172 ALL_ARGUMENTS DB_ARGUMENTS 173 USER_CONS_COLUMNS MY_CONS_COLUMNS 174 USER_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS 175 USER_SUBPART_COL_STATISTICS MY_SUBPART_COL_STATISTICS 176 USER_ROLE_PRIVS MY_ROLE_PRIVS 177 DBA_TAB_PRIVS ADM_TAB_PRIVS 178 USER_SCHEDULER_JOBS MY_SCHEDULER_JOBS 179 V$LOCK V$LOCK 180 V$DBLINK V$DBLINK 181 V$OPEN_CURSOR V$OPEN_CURSOR 182 ALL_TAB_PRIVS DB_TAB_PRIVS 183 ALL_TAB_MODIFICATIONS DB_TAB_MODIFICATIONS 184 USER_TAB_MODIFICATIONS MY_TAB_MODIFICATIONS 185 USER_AUDIT_TRAIL MY_AUDIT_TRAIL 父主题: 集中式版
  • 字符串函数 表1 字符串函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 ASCII() 支持。 - 2 BIT_LENGTH() 支持。 - 3 CHAR_LENGTH() 支持,有差异。 GaussDB此函数如果数据库字符集是SQL_ASCII,CHAR_LENGTH()会返回字节数而非字符数。 4 CHARACTER_LENGTH() 支持,有差异。 GaussDB此函数如果数据库字符集是SQL_ASCII,CHARACTER_LENGTH()会返回字节数而非字符数。 5 CONCAT() 支持。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 6 CONCAT_WS() 支持。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 7 HEX() 支持。 - 8 LENGTH() 支持。 - 9 LPAD() 支持,有差异。 MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为'GBK'时,GaussDB默认最大长度为2097152。 如果数据库字符集是SQL_ASCII,可能产生未预期的结果。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 10 MD5() 支持,有差异。 当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此导致入参为BINARY类型时,函数结果和MySQL不一致。 11 RANDOM_BYTES() 支持。 GaussDB与MySQL都使用OPENSSL生成随机字符串。 GaussDB使用 OPENSSL3.x.x生成随机字符串,与使用OPENSSL1.x.x版本的MySQL相比性能可能存在劣化。 12 REPEAT() 支持。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 13 REPLACE() 支持。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 当第三个入参为null,且第二个入参的字符串长度不为0时,GaussDB返回NULL,MySQL可能返回第一个参数的字符。 14 RPAD() 支持,有差异。 MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为'GBK'时,GaussDB默认最大长度为2097152。 如果数据库字符集是SQL_ASCII,可能产生未预期的结果。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 15 SHA()/SHA1() 支持。 - 16 SHA2() 支持。 - 17 SPACE() 支持。 - 18 STRCMP() 支持,有差异。 如果数据库字符集是SQL_ASCII,可能产生未预期的结果。 19 FIND_IN_SET() 支持,有差异。 当指定数据库使用的字符编码是SQL_ASCII时,服务器把字节值0~127根据ASCII标准解释,而字节值128~255则当作无法解析的字符;如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助你转换或者校验非ASCII字符。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 SUBSTRING 函数在第一个入参为嵌套场景下与MySQL存在差异: 第一个入参节点返回的字符序为BINARY时,MySQL可能依旧以不同的字符序逻辑处理(取决于内层嵌套的函数),而GaussDB以BINARY字符序进行函数处理,导致截取的字节长度不同。 SUBSTRING_INDEX函数存在差异: 在第三个入参为负数时,MySQL与GaussDB的比较逻辑不同,会导致结果可能存在差异。 当第三个入参为正数时,由于MySQL5.7以int32位存储,会存在回绕问题导致结果不正确。MySQL 8.0修复了该问题以int64为存储,GaussDB以8.0为准。当入参值超过2^63 -1时,也会发生回绕,可能导致第三个参数获取为负数,结果存在差异。 20 LCASE() 21 LEFT() 22 LOWER() 23 LTRIM() 24 REVERSE() 25 RIGHT() 26 RTRIM() 27 SUBSTR() 28 SUBSTRING() 29 SUBSTRING_INDEX() 30 TRIM() 31 UCASE() 32 UPPER() 33 UNHEX() 支持。 MySQL的返回值类型为BINARY、VARBINARY、BLOB、MEDIUMBLOB或LONGBLOB;GaussDB返回值类型固定为LONGBLOB。 34 FIELD() 支持。 - 35 COMPRESS() 支持,有差异。 MySQL返回类型为VARBINARY、BLOB或LONGBLOB;GaussDB返回二进制字符串类型LONGBLOB。 36 UNCOMPRESS() 支持。 - 37 UNCOMPRESS_LENGTH() 支持。 - 38 EXPORT_SET() 支持。 - 39 POSITION() 支持。 - 40 LOCATE() 支持。 - 41 CHAR() 支持,有差异。 CHAR函数指定字符集时,若转码失败,GaussDB产生报错,MySQL提示WARNING并返回NULL。 MySQL在参数为ASCII表中第0~31个和127个码值时,返回结果不可见,GaussDB会以\x01、\x02等16进制返回。 MySQL中CHAR函数入参个数无限制,GaussDB函数的入参不超过8192个。 42 ELT() 支持,有差异。 MySQL中ELT函数入参个数无限制,GaussDB函数的入参不超过8192个。 43 FORMAT() 支持。 - 44 BIN() 支持。 - 45 MAKE_SET() 支持。 MySQL 5.7版本,当MAKE_SET函数选中的第一个参数为整型、浮点型或定点型且返回结果中存在非ASCII字符,显示结果可能为乱码;GaussDB显示结果正常,和MySQL 8.0版本保持一致。 46 TO_BASE64() 支持。 - 47 FROM_BASE64() 支持。 - 48 ORD() 支持。 - 49 MID() 支持。 - 50 QUOTE() 支持,有差异。 在M-Compatibility兼容模式下,开启MySQL转义: SET m_format_behavior_compat_options=enable_escape_string; 当入参字符串中含“\0”时,GaussDB中由于字符集不支持导致无法输入。由转义字符导致的本函数与MySQL的差异,与本函数无关。 GaussDB最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。 入参为固定长度BINARY类型时,对于未填充字符:MySQL默认补充空字符“\0”,GaussDB默认补充空格。 在MySQL中,QUOTE()会处理空字符,GaussDB中,QUOTE()无法处理空字符。 51 INSERT() 支持。 - 52 INSTR() 支持。 - 父主题: 系统函数
  • 审计 云审计 服务(Cloud Trace Service,CTS),是华为 云安全 解决方案中专业的日志审计服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、合规审计、资源跟踪和问题定位等常见应用场景。 CTS的详细介绍和开通配置方法,请参见CTS快速入门。 通过云审计服务,您可以记录与GaussDB实例相关的操作事件,便于日后的查询、审计和回溯。具体内容请参见支持审计的关键操作列表。
  • 日志 出于分析或审计等目的,用户可以开启实例的日志记录功能。当用户开启日志记录功能后,GaussDB可以通过管理控制台下载日志。 错误日志 GaussDB支持下载错误日志。错误日志记录了数据库运行时的日志,通过错误日志有助于分析系统中存在的问题。错误日志的详细介绍,请参见错误日志。 慢日志 GaussDB支持下载慢日志。慢日志可以帮助您定位SQL语句执行慢的问题,从而进行优化。慢日志的详细介绍,请参见慢日志。
  • 其他语句 表1 其他语法兼容介绍 序号 概述 详细语法说明 差异 1 事务相关语法 数据库默认隔离级别 M-Compatibility默认隔离级别为READ COMMITTED,MySQL默认隔离级别为REPEATABLE READ。 M-Compatibility隔离级别只有READ COMMITTED REPEATABLE READ生效。 2 事务相关语法 事务嵌套 M-Compatibility中嵌套事务不会自动提交,MySQL会自动提交。 3 事务相关语法 自动提交 M-Compatibility使用GaussDB存储,继承GaussDB事务机制,事务中执行DDL,DCL不会自动提交。MySQL在DDL、DCL、管理类语句,锁相关语句会自动提交。 4 事务相关语法 报错后需rollback M-Compatibility事务中报错,需要执行rollback,MySQL无限制。 5 事务相关语法 锁机制 M-Compatibility锁机制只能在事务块中使用,MySQL无限制。 6 锁机制 锁机制 MySQL获取read锁后,当前会话无法进行写操作,M-Compatibility获取read锁后,当前会话可以进行写操作。 MySQL给表上锁后,读取其他表报错,M-Compatibility无限制。 MySQL同一会话中获取同一个表的锁,会自动释放上一个锁,并提交事务,M-Compatibility无该机制。 M-Compatibility中LOCK TABLE只能在一个事务块的内部有用,且无UNLOCK TABLE命令,锁总是在事务结束时释放。 7 PBE PBE 重复创建同名的PREPARE语句,M-Compatibility会报已经存在的错误,需要先删除已有statement,MySQL会覆盖旧的statement。 M-Compatibility和MySQL在SQL语句执行过程中对异常场景的报错阶段不同,例如解析层、执行层等;而PREPARE语句对预备语句只处理到解析层。因此PBE下对于异常场景,报错位置在PREPARE阶段还是EXECUTE阶段,M-Compatibility和MySQL存在可能差异。 父主题: SQL
  • 其它函数 序号 Oracle数据库 GaussDB数据库 1 聚合函数 支持 2 分析函数 支持 3 对象引用函数 不支持 4 模型函数 不支持 5 OLAP函数 不支持 6 数据盒功能函数 不支持 7 关于用户定义的函数 支持 表1 聚合函数 序号 Oracle数据库 GaussDB数据库 差异 1 AVG 支持 - 2 CORR 支持 - 3 COUNT 支持 - 4 COVAR_POP 支持 - 5 COVAR_SAMP 支持 - 6 CUME_DIST 支持 - 7 DENSE_RANK 支持 - 8 FIRST 支持 GaussDB使用KEEP的语法,兼容Oracle此功能。 9 GROUPING 支持 - 10 LAST 支持 GaussDB使用KEEP的语法,兼容Oracle此功能。 11 LISTAGG 支持 - 12 MAX 支持 - 13 MEDIAN 支持 - 14 MIN 支持 - 15 PERCENT_RANK 支持 - 16 PERCENTILE_CONT 支持 - 17 RANK 支持 - 18 REGR_ (Linear Regression) 支持 - 19 STDDEV 支持 - 20 STDDEV_POP 支持 - 21 STDDEV_SAMP 支持 - 22 SUM 支持 - 23 VAR_POP 支持 - 24 VAR_SAMP 支持 - 25 VARIANCE 支持 - 26 WM_CONCAT 支持 - 表2 分析函数 序号 Oracle数据库 GaussDB数据库 差异 1 FIRST_VALUE 支持 - 2 LAG 支持 - 3 LAST_VALUE 支持 - 4 LEAD 支持 - 5 NTH_VALUE 支持,有差异 Oracle:支持FROM FIRST|LAST语法格式。 GaussDB:不支持FROM FIRST|LAST语法格式 6 NTILE 支持 - 7 ROW_NUMBER 支持 - 8 RATIO_TO_REPORT 支持 - 父主题: 系统函数
  • 流程控制函数 表1 流程控制函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 IF() 支持,有差异。 当第一个参数为TRUE且第三个参数表达式中存在隐式类型转换错误,或者第一个参数为FALSE且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 2 IFNULL() 支持,有差异。 第一个参数不为NULL且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 3 NULLIF() 支持,有差异。 函数返回值类型在MySQL5.7和MySQL8.0中存在差异,考虑到MySQL8.0更合理,因此函数返回值类型兼容MySQL8.0。 父主题: 系统函数
  • GaussDB与其他服务的关系 GaussDB与其他服务的关系如表1。 表1 与其他服务的关系 相关服务 交互功能 弹性云服务器(ECS) 通过弹性云服务器(Elastic Cloud Server,简称ECS)远程连接GaussDB可以有效地降低应用响应时间、节省公网流量费用。 虚拟私有云(VPC) 对您的GaussDB实例进行网络隔离和访问控制。 对象存储服务 (OBS) 存储GaussDB实例的自动和手动备份数据。 云监控服务 (Cloud Eye) 云监控 服务是一个开放性的监控平台,帮助用户实时监测GaussDB资源的动态。云监控服务提供多种告警方式以保证及时预警,为您的服务正常运行保驾护航。 云审计服务(CTS) 云审计服务(Cloud Trace Service,简称CTS),为用户提供云服务资源的操作记录,供您查询、审计和回溯使用。 企业管理服务(EPS) 企业管理服务(Enterprise Project Management Service,简称EPS)提供统一的云资源按企业项目管理,以及企业项目内的资源管理、成员管理。 标签管理服务(TMS) 标签管理服务(Tag Management Service,简称TMS)是一种快速便捷将标签集中管理的可视化服务,提供跨区域、跨服务的集中标签管理和资源分类功能。 数据管理服务(DAS) 使用数据管理服务(Data Admin Service,简称DAS),通过专业优质的可视化操作界面,提高数据管理工作的效率和安全。
  • 二进制数据类型 表1 二进制数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 BINARY[(M)] 不支持 - 2 VARBINARY(M) 不支持 - 3 TINYBLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制255字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 4 BLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制65535字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 5 MEDIUMBLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制16777215字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 6 LONGBLOB 支持 取值范围:表现规格为BYTEA类型。只支持不超过1G,具体范围参照bytea数据类型集中式和分布式规格。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 7 BIT[(M)] 不支持 - 父主题: 数据类型
  • DDL 序号 MySQL数据库功能概述 详细语法说明 GaussDB数据库实现差异 1 建表和修改表时支持创建主键、UNIQUE索引、外键约束 ALTER TABLE、CREATE TABLE GaussDB当前不支持UNIQUE INDEX|KEY index_name语法,使用UNIQUE INDEX|KEY index_name语法时会报错。 当约束被建立为全局二级索引,SQL语句中指定using btree时,底层会建立为ubtree。 当约束关联的表为ustore,且SQL语句中指定为using btree时,底层会建立为ubtree。 2 支持自增列 ALTER TABLE、CREATE TABLE 自动增长列建议为索引(非全局二级索引)的第一个字段,否则建表时产生警告,含有自动增长列的表进行某些操作时会产生错误,例如:ALTERT TABLE EXCHANGE PARTITION。MySQL自动增长列必须为索引第一个字段。 AUTO_INCREMENT = value语法,value必须为小于2^127的正数。MySQL不校验value。 当自增值已经达到字段数据类型的最大值时,继续自增将产生错误。MySQL有些场景产生错误或警告,有些场景仍自增为最大值。 不支持innodb_autoinc_lock_mode系统变量,GaussDB的GUC参数auto_increment_cache=0时,批量插入自动增长列的行为与MySQL系统变量innodb_autoinc_lock_mode=1相似。 自动增长列在导入数据或者进行Batch Insert执行计划的插入操作时,对于混合0、NULL和确定值的场景,如果产生错误,后续插入自增值不一定与MySQL完全一致。 提供auto_increment_cache参数,可以控制预留自增值的数量。 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。并行插入产生的自增值结果无法保证与MySQL完全一致。 本地临时表中的自动增长列批量插入时不会预留自增值,正常场景不会产生不连续的自增值。MySQL临时表与普通表中的自动增长列自增结果一致。 SERIAL数据类型为原有的自增列,与AUTO_INCREMENT自增列有差异。MySQL的SERIAL数据类型就是AUTO_INCREMENT自增列。 不允许auto_increment_offset的值大于auto_increment_increment的值,会产生错误。MySQL允许,并说明auto_increment_offset会被忽略。 在表有主键或索引的情况下,ALTER TABLE命令重写表数据的顺序与MySQL不一定相同,GaussDB按照表数据存储顺序重写,MySQL会按主键或索引顺序重写,导致自增值的顺序可能不同。 ALTER TABLE命令添加或修改自增列时,第一次预留自增值的数量是表统计信息中的行数,统计信息的行数不一定与MySQL一致。 last_insert_id函数返回值为128位的整型。 在触发器或用户自定义函数中自增时,刷新last_insert_id返回值。MySQL不刷新。 对GUC参数auto_increment_offset和auto_increment_increment设置超出范围的值会产生错误。MySQL会自动改为边界值。 sql_mode设置no_auto_value_on_zero参数,表定义的自动增长列为非NOT NULL约束,向表中插入数据不指定自动增长列的值时,GaussDB中自动增长列插入NULL值,且不触发自增;MySQL中自动增长列插入NULL值,触发自增。 3 支持前缀索引 CREATE INDEX、ALTER TABLE、CREATE TABLE 前缀长度不得超过2676,键值的实际长度受内部页面限制,若字段中含有多字节字符或者一个索引上有多个键,索引行长度可能会超限报错。 CREATE INDEX语法中,不支持以下关键字作为前缀键的字段名称:COALESCE、EXTRACT、GREATEST、LEAST、LNNVL、NULLIF、NVL、NVL2、OVERLAY、POSITION、REGEXP_LIKE、SUBSTRING、TIMESTAMPDIFF、TREAT、TRIM、XMLCONCAT、XMLELEMENT、XMLEXISTS、XMLFOREST、XMLPARSE、XMLPI、XMLROOT、XMLSERIALIZE。 主键索引中不支持前缀键。 4 支持指定字符集与排序规则 ALTER SCHEMA、ALTER TABLE、 CREATE SCHEMA、CREATE TABLE - 5 修改表时支持在表第一列前面或者在指定列后面添加列 ALTER TABLE - 6 修改列名称/定义语法兼容 ALTER TABLE - 7 定时任务EVENT语法兼容 ALTER EVENT、CREATE EVENT、DROP EVENT、 SHOW EVENTS - 8 创建分区表语法兼容 CREATE TABLE PARTITION、CREATE TABLE SUBPARTITION - 9 建表和修改表时支持指定表级和列级comment CREATE TABLE、ALTER TABLE - 10 创建索引时支持指定索引级comment CREATE INDEX - 11 交换普通表和分区表分区的数据 ALTER TABLE PARTITION ALTER TABLE EXCHANGE PARTITION的差异点: 对于自增列,MySQL执行alter exchange partition后,自增列会被重置;GaussDB 则不会被重置,自增列则按照旧的自增值递增。 MySQL表或分区使用tablespace时,则无法进行分区和普通表数据的交换;GaussDB表或分区使用不同的tablespace时,仍可进行分区和普通表数据的交换。 对于列默认值,MySQL不会校验默认值,因此默认值不同时也可进行分区和普通表数据的交换;GaussDB会校验默认值,如果默认值不同,则无法进行分区和普通表数据的交换。 MySQL在分区表或普通表上进行DROP列操作后,表结构仍然一致,则可进行分区和普通表数据的交换;GaussDB需要保证普通表和分区表的被删除列严格对齐才能进行分区和普通表数据的交换。 MySQL和GaussDB的哈希算法不同,所以两者在相同的hash分区存储的数据可能不一致,导致最后交换的数据也可能不一致。 MySQL的分区表不支持外键,普通表包含外键或其他表引用普通表的外键,则无法进行分区和普通表数据的交换;GaussDB的分区表支持外键,在两个表的外键约束一致时,则可进行分区和普通表数据的交换,GaussDB的分区表不带外键,普通表有其他表引用,如果分区表和普通表表一致,则可进行分区和普通表数据的交换。 12 支持删除表的主键外键约束 ALTER TABLE DROP [PRIMARY | FOREIGN]KEY - 13 支持CREATE TABLE ... LIKE语法兼容 CREATE TABLE ... LIKE 在MySQL 8.0.16 之前的版本中,CHECK约束会被语法解析但功能会被忽略,表现为不复制CHECK约束,GaussDB支持复制CHECK约束。 对于主键约束名称,在建表时,MySQL所有主键约束名称固定为PRIMARY KEY,GaussDB不支持复制。 对于唯一键约束名称,在建表时,MySQL支持复制,GaussDB不支持复制。 对于CHECK约束名称,在建表时,MySQL 8.0.16 之前的版本无CHECK约束信息,GaussDB支持复制。 对于索引名称,在建表时,MySQL支持复制,GaussDB不支持复制。 在跨sql_mode模式建表时,MySQL受宽松模式和严格模式控制,GaussDB可能存在严格模式失效的情况。 例如:源表存在默认值“0000-00-00”,在“no_zero_date”严格模式下,GaussDB建表成功,且包含默认值“0000-00-00”,严格模式失效;而MySQL建表失败,受严格模式控制。 针对跨数据库创建表,MySQL支持,GaussDB不支持。 14 支持更改表名兼容语法 ALTER TABLE tbl_name RENAME [TO | AS | =] new_tbl_name; RENAME {TABLE | TABLES} tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2, ...]; GaussDB的alter rename语法仅支持修改表名称功能操作,不能耦合其它功能操作。 GaussDB仅旧表名字段支持如schema.table_name用法;且新表名与旧表名将属于同一Schema下。 GaussDB不支持新旧表跨Schema重命名操作;但如有权限,则可在当前Schema下修改其它Schema下表名称。 GaussDB的rename多组表的语法支持全为本地临时表的重命名,不支持本地临时表和非本地临时表组合的场景。 GaussDB的RENAME TABLE校验顺序与MySQL不一致,导致报错信息不一致。 15 支持增加子分区语法兼容 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; action: move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | ilm_clause add_clause: ADD {{partition_less_than_item | partition_start_end_item | partition_list_item} | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} 不支持如下语法添加多分区: ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition1,…); 仅支持原有添加多分区语法: ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2[y1] ), …; 父主题: SQL
  • MySQL数据库兼容性概述 本章节主要介绍GaussDB数据库的MySQL 5.7兼容模式(即sql_compatibility='B'、且设置参数b_format_version='5.7'、b_format_dev_version='s1'时)与MySQL 5.7数据库的兼容性对比信息。仅介绍503.0.0版本后新增的兼容性特性,特性的相关规格和约束建议在开发指南中查看。 GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼容。 由于GaussDB数据库与MySQL数据库底层框架实现存在差异,GaussDB数据库与MySQL数据库仍存在部分差异。 父主题: MySQL数据库兼容性B模式
  • 条件 本章节描述常见的条件兼容项,包含比较条件、浮点条件、逻辑条件、模型条件、多集合条件、模式匹配条件、NULL值条件、XML条件、SQL/JSON条件、复合条件、BETWEEN条件、EXISTS条件、IN条件、IS OF TYPE条件,如表1所示。 表1 条件 序号 Oracle数据库 GaussDB数据库 差异 1 比较条件 支持,有差异 语句中存在ANY、SOME、ALL操作符时存在差异,Oracle支持对list对象进行操作,而GaussDB中需要将list对象转换成数组表达式的形式后再进行操作。 2 浮点条件 不支持 - 3 逻辑条件 支持 - 4 模型条件 不支持 - 5 多集合条件 不支持 - 6 模式匹配条件 支持 - 7 NULL值条件 支持 - 8 XML条件 不支持 - 9 SQL/JSON条件 部分支持,有差异 GaussDB不支持IS JSON条件和JSON_TEXTCONTAINS条件。 GaussDB中JSONB_EQ条件等同于Oracle中JSON_EQUAL条件,但GaussDB不支持ERROR子句。 GaussDB中JSONB_EXISTS条件等同于Oracle中JSON_EXISTS条件,但GaussDB不支持ERROR子句、EMPTY子句和PASSING子句。 10 复合条件 支持 - 11 BETWEEN条件 支持 - 12 EXISTS条件 支持 - 13 IN条件 支持 - 14 IS OF TYPE条件 不支持 - 父主题: 分布式版
  • 其它函数 序号 Oracle数据库 GaussDB数据库 1 聚合函数 支持 2 分析函数 支持 3 对象引用函数 不支持 4 模型函数 不支持 5 OLAP函数 不支持 6 数据盒功能函数 不支持 7 关于用户定义的函数 支持 表1 聚合函数 序号 Oracle数据库 GaussDB数据库 差异 1 AVG 支持 - 2 CORR 支持 - 3 COUNT 支持 - 4 COVAR_POP 支持 - 5 COVAR_SAMP 支持 - 6 CUME_DIST 支持 - 7 DENSE_RANK 支持 - 8 FIRST 支持 GaussDB使用KEEP的语法,兼容Oracle此功能。 9 GROUPING 支持 - 10 LAST 支持 GaussDB使用KEEP的语法,兼容Oracle此功能。 11 LISTAGG 支持 - 12 MAX 支持 - 13 MEDIAN 支持 - 14 MIN 支持 - 15 PERCENT_RANK 支持 - 16 PERCENTILE_CONT 支持 - 17 RANK 支持 - 18 REGR_ (Linear Regression) 支持 - 19 STDDEV 支持 - 20 STDDEV_POP 支持 - 21 STDDEV_SAMP 支持 - 22 SUM 支持 - 23 VAR_POP 支持 - 24 VAR_SAMP 支持 - 25 VARIANCE 支持 - 26 WM_CONCAT 支持 - 表2 分析函数 序号 Oracle数据库 GaussDB数据库 差异 1 FIRST_VALUE 支持 - 2 LAG 支持 - 3 LAST_VALUE 支持 - 4 LEAD 支持 - 5 NTH_VALUE 支持,有差异 Oracle:支持FROM FIRST|LAST语法格式。 GaussDB:不支持FROM FIRST|LAST语法格式。 6 NTILE 支持 - 7 ROW_NUMBER 支持 - 8 RATIO_TO_REPORT 支持 - 父主题: 系统函数
  • GaussDB数据库和内核引擎版本对应关系 GaussDB版本的对应关系如表1所示。 GaussDB数据库引擎版本和内核引擎版本查询方法请参考查看云数据库GaussDB数据库和内核引擎版本。 表1 GaussDB数据库和内核引擎版本对应关系 GaussDB数据库引擎版本 GaussDB内核引擎版本 V2.0-8.201.0 505.2.0 V2.0-3.226.0 503.1.0.SPC2300 V2.0-3.223.0 503.1.0.SPC2000 V2.0-3.222.0 503.1.0.SPC1700 V2.0-3.220.0 503.1.0.SPC1500 V2.0-3.208.0 503.1.0.SPC1200 V2.0-3.207.0 503.1.0.SPC1100 V2.0-3.201.0 503.1.0.SPC0200
  • 数字操作函数 表1 数字操作函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 ABS() 支持。 - 2 ACOS() 支持。 - 3 ASIN() 支持。 - 4 ATAN() 支持。 - 5 ATAN2() 支持。 - 6 CEILING() 支持,有差异。 部分操作结果类型以及CREATE TABLE AS的精度与MySQL不一致。 入参为INT类型时,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。 入参为BIGINT类型或BIGINT UNSIGNED类型,入参值大于等于20位时(包括符号位),GaussDB返回整型,MySQL5.7返回DECIMAL。该情况下会导致嵌套场景时,CEILING函数作为内层函数存在差异。 SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE tt AS SELECT ceiling(-9223372036854775808); DESC tt; MySQL表字段返回类型为:DECIMAL(16,0)。 GaussDB表字段返回类型为:BIGINT(17)。 入参为NUMERIC类型时,返回类型可能与MySQL不一致。 当参数为常量、表字段时结果类型和MySQL5.7保持一致。对于其他类型的入参如嵌套情况,结果会有差异,GaussDB返回NUMERIC类型,MySQL可能返回整型。 SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE t AS SELECT ceiling(-5.5); DESC t; MySQL表字段返回类型为:INT(5)。 GaussDB表字段返回类型为:INT(5)。 SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE t AS SELECT ceiling(abs(5.5)); DESC t; MySQL表字段返回类型为:INT(4)。 GaussDB表字段返回类型为:DECIMAL(3,0)。 7 COS() 支持。 - 8 DEGREES() 支持。 - 9 EXP() 支持。 - 10 FLOOR() 支持,有差异。 部分操作结果类型以及CREATE TABLE AS的精度与MySQL不一致。 入参为INT类型时,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。 入参为BIGINT类型或BIGINT UNSIGNED类型,入参值大于等于20位时(包括符号位),GaussDB返回整型,MySQL5.7返回DECIMAL。该情况下会导致嵌套场景时,floor函数作为内层函数存在差异。 -- 宽松模式下: SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE tt AS SELECT floor(-9223372036854775808); DESC tt; MySQL表字段返回类型为:DECIMAL(16,0)。 GaussDB表字段返回类型为:BIGINT(17)。 入参为NUMERIC类型时,返回类型可能与MySQL不一致。 当参数为常量、表字段时结果类型和MySQL5.7保持一致。对于其他类型的入参如嵌套情况,结果会有差异,GaussDB返回NUMERIC类型,MySQL可能返回整型。 SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE t AS SELECT floor(-5.5); DESC t; MySQL表字段返回类型为:INT(5)。 GaussDB表字段返回类型为:INT(5)。 SET m_format_behavior_compat_options='enable_precision_decimal'; CREATE TABLE t AS SELECT floor(abs(5.5)); DESC t; MySQL表字段返回类型为:INT(4)。 GaussDB表字段返回类型为:DECIMAL(3,0)。 11 LN() 支持。 - 12 LOG () 支持。 - 13 LOG10() 支持。 - 14 LOG2() 支持。 - 15 PI() 支持。 精度传递开关关闭的情况下,也即m_format_behavior_compat_options中的enable_precision_decimal未设置时,PI函数的返回值精度与MySQL的有差异:MySQL中PI函数的结果仅保留四舍五入之后的小数后6位,而GaussDB的结果会保留四舍五入之后的小数后15位。 16 POW() 支持。 - 17 POWER() 支持。 - 18 RAND() 支持。 - 19 SIGN() 支持。 - 20 SIN() 支持。 - 21 SQRT() 支持。 - 22 TAN() 支持。 - 23 TRUNCATE() 支持。 - 24 CEIL() 支持。 - 25 CRC32() 支持,有差异。 当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此入参为BINARY类型时,函数结果和MySQL不一致。 26 CONV() 支持。 - 父主题: 系统函数
  • 条件 本章节描述常见的条件兼容项,包含比较条件、浮点条件、逻辑条件、模型条件、多集合条件、模式匹配条件、NULL值条件、XML条件、SQL/JSON条件、复合条件、BETWEEN条件、EXISTS条件、IN条件、IS OF TYPE条件。详情请参见表1。 表1 条件 序号 Oracle数据库 GaussDB数据库 差异 1 比较条件 支持,有差异 语句中存在ANY、SOME、ALL操作符时存在差异,Oracle支持对list对象进行操作,而GaussDB中需要将list对象转换成数组表达式的形式后再进行操作。 2 浮点条件 不支持 - 3 逻辑条件 支持 - 4 模型条件 不支持 - 5 多集合条件 不支持 - 6 模式匹配条件 支持 - 7 NULL值条件 支持 - 8 XML条件 不支持 - 9 SQL/JSON条件 部分支持,有差异 GaussDB不支持IS JSON条件和JSON_TEXTCONTAINS条件。 GaussDB中JSONB_EQ条件等同于Oracle中JSON_EQUAL条件,但GaussDB不支持ERROR子句。 GaussDB中JSONB_EXISTS条件等同于Oracle中JSON_EXISTS条件,但GaussDB不支持ERROR子句、EMPTY子句和PASSING子句。 10 复合条件 支持 - 11 BETWEEN条件 支持 - 12 EXISTS条件 支持 - 13 IN条件 支持 - 14 IS OF TYPE条件 不支持 - 父主题: 集中式版
  • Database和Schema设计 MySQL的数据对象包括DATABASE、TABLE、INDEX、VIEW、TRIGGER、PROC等,MySQL的对象层次跟GaussDB的对应关系是从上至下且一对多包含关系。如下图所示: 图1 MySQL和GaussDB中Database和Schema之间的差异 在MySQL中Database和Schema是同义词;而在GaussDB中,一个Database 下可以有多个Schema。在该特性中,每个MySQL中的Database都被映射到GaussDB的一个Schema。 在MySQL中,INDEX从属于一个TABLE,但在GaussDB中,INDEX从属于一个Schema。这个差异导致INDEX名在GaussDB中要求在Schema内唯一,但在MySQL中仅要在在一个表内唯一。这个差异将作为当前约束予以保留。
  • 数据库实例状态 数据库实例状态是数据库实例的运行情况。用户可以使用管理控制台和API操作查看数据库实例状态。 表1 状态及说明 状态 说明 正常 数据库实例正常和可用。 异常 数据库实例不可用。 创建中 正在创建数据库实例。 创建失败 数据库实例创建失败。 重启中 数据库实例重启中。 启动中 数据库实例启动中。 节点启动中 数据库实例节点启动中。 停止中 数据库实例停止中。 节点停止中 数据库实例节点停止中。 已停止 数据库实例/节点已停止。 扩容中 数据库实例磁盘扩容中。 添加节点中 数据库实例节点扩容中。 备份中 正在备份数据库实例。 恢复中 正在恢复备份到实例中。 恢复失败 实例恢复失败。 冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。您需前往费用中心充值成功,欠款核销后,冻结的实例才会解冻。 存储空间满 实例的磁盘空间已满,此时不可进行数据库写入操作,您需要扩容磁盘使实例恢复到正常状态。 已删除 数据库实例已被删除,对于已经删除的实例,将不会在实例列表中显示。 版本升级中 实例版本正在升级中。 参数变更,等待重启 数据库参数修改后,有些参数修改,需等待用户重启实例才能生效。 变更副本中 数据库实例正在执行降副本操作。
  • GaussDB分布式版形态整体架构 GaussDB分布式版形态整体架构如下: 图1 GaussDB分布式版形态整体架构图 Coordinator Node:协调节点CN,负责接收来自应用的访问请求,并向客户端返回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。 GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事务快照、时间戳、Sequence信息等全局唯一的信息。 Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及向CN返回执行结果。
  • GaussDB 集中式形态整体架构 GaussDB 集中式形态整体架构如下: 图2 GaussDB集中式形态整体架构图 ETCD:分布式键值存储系统(Editable Text Configuration Daemon)。用于共享配置和服务发现(服务注册和查找)。 CMS:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。 Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及返回执行结果。
  • 二进制数据类型 表1 二进制数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 BINARY[(M)] 不支持 - 2 VARBINARY(M) 不支持 - 3 TINYBLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制255字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 4 BLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制65535字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符与、或、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 5 MEDIUMBLOB 支持 取值范围:表现规格为BYTEA类型。不支持长度限制16777215字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符与、或、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 6 LONGBLOB 支持 取值范围:表现规格为BYTEA类型。只支持不超过1G,具体范围参照bytea数据类型集中式和分布式规格。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用jdbc驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 7 BIT[(M)] 不支持 - 父主题: 数据类型
  • JSON函数 json函数差异说明: 对于json函数和其他字符入参函数来说,如果含有转义字符的输入,默认情况下会与MySQL有一定差异,需要设置GUC参数set standard_conforming_strings= off;的情况下,对于转义字符的场景才会与MySQL兼容,但是会产生非标准字符输入的warning告警,在转义字符中\t、\u与转义数字与MySQL有差异。JSON_UNQUOTE()函数该场景下已做兼容,不设置GUC参数时,仍与MySQL兼容,且不会报警。 在处理超长数字(数字的字符长度超过64)时,GaussDB的json函数会将数字解析为一个double处理,并使用科学计数法计数。和MySQL的非json类型入参相同。但是在json类型入参时,由于json类型未完全与MySQL兼容,此场景下会产生差异。MySQL会完整显示数字(并且当数字长度超过82时,MySQL会给出错误的结果。),GaussDB依然将超长数字解析为一个double精度的值。考虑到超长数字内部都是使用浮点数进行储存,进行运算时无论GaussDB还是MySQL都会有精度丢失,建议您使用字符串来储存超长数字。 gaussdb=# select json_insert('[1, 4, 99999999999999999999999999999999999999999999999999999999999999999999999999]','$[6]',json_insert('[1,4]','$[5]',99999999999999999999999999999999999999999999999999999999999999999999999999)); json_insert ------------------------------ [1, 4, 1e+74, [1, 4, 1e+74]] (1 row) 表1 JSON函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 JSON_APPEND() 支持 - 2 JSON_ARRAY() 支持 - 3 JSON_ARRAY_APPEND() 支持 - 4 JSON_ARRAY_INSERT() 支持 - 5 JSON_CONTAINS() 支持 - 6 JSON_CONTAINS_PATH() 支持 - 7 JSON_DEPTH() 支持 - 8 JSON_EXTRACT() 支持 - 9 JSON_INSERT() 支持 - 10 JSON_KEYS() 支持 - 11 JSON_LENGTH() 支持 - 12 JSON_MERGE() 支持 - 13 JSON_OBJECT() 支持 - 14 JSON_QUOTE() 支持 - 15 JSON_REMOVE() 支持 - 16 JSON_REPLACE() 支持 - 17 JSON_SEARCH() 支持 返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是json。 18 JSON_SET() 支持 - 19 JSON_TYPE() 支持 - 20 JSON_UNQUOTE() 支持 - 21 JSON_VALID() 支持 - 父主题: 系统函数
  • 控制语句 表1 条件语句 序号 Oracle数据库 GaussDB数据库 1 IF THEN 支持 2 IF THEN ELSE 支持 3 IF THEN ELSIF 支持 4 simple CASE: CASE selector WHEN selector_value_1 THEN statements_1 WHEN selector_value_2 THEN statements_2 ... WHEN selector_value_n THEN statements_n [ ELSE else_statements END CASE;] 支持 5 searched CASE: CASE WHEN condition_1 THEN statements_1 WHEN condition_2 THEN statements_2 ... WHEN condition_n THEN statements_n [ ELSE else_statements END CASE;] 支持 表2 LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] LOOP statements END LOOP [ label ]; 支持 2 EXIT; 支持 3 EXIT WHEN; 支持 4 CONTINUE; 支持 5 CONTINUE WHEN; 支持 表3 FOR循环语句 序号 Oracle数据库 GaussDB数据库 差异 1 [ label ] FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP statements END LOOP [ label ]; 支持,有差异 GaussDB使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 2 EXIT WHEN; 支持 - 3 CONTINUE WHEN; 支持 - 表4 WHILE LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] WHILE condition LOOP statements END LOOP [ label ]; 支持 表5 GOTO语句 序号 Oracle数据库 GaussDB数据库 1 GOTO 支持 表6 NULL语句 序号 Oracle数据库 GaussDB数据库 1 NULL 支持 父主题: PL/SQL语言
共100000条