华为云用户手册

  • 数据保护技术 GaussDB 通过多种数据保护手段和特性,保障存储在GaussDB中的数据安全可靠。 表1 多种数据保护手段 数据保护手段 简要说明 详细介绍 传输加密(HTTPS) 支持HTTP和HTTPS两种传输协议,为保证数据传输的安全性,推荐您使用更加安全的HTTPS协议。 构造请求 数据备份 支持设置数据库的备份和恢复,来保障数据的可靠性。 数据备份 敏感操作保护 控制台支持敏感操作保护,开启后执行删实例等敏感操作时,系统会进行身份验证,进一步保证GaussDB配置和数据的安全性。 敏感操作保护介绍 SSL 数据加密 可以使用SSL来加密数据库GaussDB和客户端的连接。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。 SSL连接数据库 删除保护 GaussDB支持将删除的实例,加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 回收站 父主题: 安全
  • 隐式提交的语句 M-Compatibility使用GaussDB存储,继承GaussDB事务机制,事务中执行DDL、DCL不会自动提交。 MySQL在DDL、DCL、管理类语句,锁相关语句会自动提交。 -- M-Compatibility创建表和设置GUC参数可以回滚掉。 m_db=# DROP TABLE IF EXISTS test_table_rollback; m_db=# BEGIN; m_db=# CREATE TABLE test_table_rollback(a int, b int); m_db=# \d test_table_rollback; m_db=# ROLLBACK; m_db=# \d test_table_rollback; -- 不存在该表。
  • 嵌套事务 嵌套事务指在事务块中开启新事务。 M-Compatibility中,正常事务块中开启新事务会警告存在一个进行中的事务,忽略开启命令;异常事务块中开启新事物将报错,必须在执行ROLLBACK/COMMIT之后才可以执行,执行ROLLBACK/COMMIT会回滚之前语句。 MySQL中,正常事务块中开启新事务会先把之前事务提交,然后开启新事务;异常事务块中开启新事务会忽略错误,提交之前无错误的语句并开启新事务。 -- M-Compatibility正常事务块中,开启新事务会警告并忽略。 m_db=# DROP TABLE IF EXISTS test_t; m_db=# CREATE TABLE test_t(a int, b int); m_db=# BEGIN; m_db=# INSERT INTO test_t values(1, 2); m_db=# BEGIN; -- 会警告there is already a transaction in progress。 m_db=# SELECT * FROM test_t ORDER BY 1; m_db=# COMMIT; -- M-Compatibility异常事务块中,开启新事务会报错,必须ROLLBACK/COMMIT之后才可以执行。 m_db=# BEGIN; m_db=# ERROR sql; -- 错误语句。 m_db=# BEGIN; -- 报错。 m_db=# COMMIT; -- ROLLBACK/COMMIT之后才可以执行。
  • SET TRANSACTION差异 M-Compatibility中,SET TRANSACTION同时设置多次隔离级别/事务访问模式时,只有最后一个会生效;多个事务特性支持使用空格和逗号分割。 MySQL中SET TRANSACTION不允许设置多次隔离级别/事务访问模式;多个事务特性只支持使用逗号分割。 表1 SET TRANSACTION差异 序号 语法 功能 差异 1 SET TRANSACTION 设置事务特性。 M-Compatibility中,SET TRANSACTION在会话级别生效;MySQL中SET TRANSACTION在下一个事务生效。 2 SET SESSION TRANSACTION 设置会话级事务特性。 - 3 SET GLOBAL TRANSACTION 设置全局会话级事务特性,该特性适用于后续会话,对当前会话无影响。 M-Compatibility中,GLOBAL是全局会话级别生效,只针对当前数据库实例,其它数据库不影响。 MySQL中,会使所有数据库生效。 -- SET TRANSACTION会话级生效。 m_db=# SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE; m_db=# SHOW transaction_isolation; m_db=# SHOW transaction_read_only; -- M-Compatibility同时设置多次隔离级别/事务访问模式,最后一个生效。 m_db=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL REPEATABLE READ, READ WRITE, READ ONLY; m_db=# SHOW transaction_isolation; -- repeatable read m_db=# SHOW transaction_read_only; -- on
  • START TRANSACTION差异 M-Compatibility中,START TRANSACTION开启事务时,同时支持设置隔离级别;同时设置多次隔离级别/事务访问模式时,只有最后一个会生效;当前版本不支持立即开启一致性快照;多个事务特性支持空格和逗号分割。 MySQL的start transaction 开启事务时,不支持设置隔离级别,不支持设置多次事务访问模式;多个事务特性只支持逗号分割。 -- 开启事务设置隔离级别。 m_db=# START TRANSACTION ISOLATION LEVEL READ COMMITTED; m_db=# COMMIT; -- 多次设置访问模式。 m_db=# START TRANSACTION READ ONLY, READ WRITE; m_db=# COMMIT;
  • 事务相关的GUC参数 表2 事务相关的GUC参数差异 序号 GUC参数 功能 差异 1 autocommit 设置事务自动提交模式。 - 2 transaction_isolation 在GaussDB中是设置当前事务的隔离级别。 在MySQL中是设置会话级事务的隔离级别。 GaussDB中,通过使用SET命令,只能改变当前事务的隔离级别。如果想要改变会话级的隔离级别,可以使用default_transaction_isolation。在MySQL中,通过使用SET命令,可以改变会话级的事务隔离级别。 支持范围差异。 MySQL中,支持以下隔离级别设置,对大小写不敏感,对空格敏感: READ-COMMITTED READ-UNCOMMITTED REPEATABLE-READ SERIALIZABLE GaussDB中,支持以下隔离级别设置,对大小写和空格敏感: read committed read uncommitted repeatable read serializable default (设置和会话中默认隔离级别一样) 设置m_format_dev_version = 's2'时,支持MySQL的隔离级别设置。 在GaussDB中,新事务的transaction_isolation值将被初始化为default_transaction_isolation的值。 设置m_format_dev_version = 's2'时: 以下语句是设置下一个事务特性:set @@transaction_isolation = value; set transaction isolation level value。 以下语句修改会话级事务特性:set [local|session|@@session.] transaction_isolation = value。 下一个事务特性不允许在事务内使用,如果隐式事务报错,即单个SQL语句报错,继续保持下一个事务特性。 3 tx_isolation 设置事务的隔离级别; tx_isolation和transaction_isolation是同义词。 GaussDB中只支持查询,不支持修改。 4 default_transaction_isolation 设置事务的隔离级别。 GaussDB中通过SET设置会改变会话级事务隔离级别。 MySQL中不支持该系统参数。 5 transaction_read_only 在GaussDB中是设置当前事务的访问模式。 在MySQL中是设置会话级事务的访问模式。 在GaussDB中,通过使用SET命令,只能改变当前事务的访问模式。如果想要改变会话级的访问模式,可以使用default_transaction_read_only。 在MySQL中,通过使用SET命令,可以改变会话级的事务隔离级别。 在GaussDB中,新事务的transaction_read_only值将被初始化为default_transaction_read_only的值。 设置m_format_dev_version = 's2'时: 以下语句是设置下一个事务特性:set @@transaction_read_only = value; set transaction {read write | read only}。 以下语句修改会话级事务特性:set [local|session|@@session.] transaction_read_only = value。 下一个事务特性不允许在事务内使用,如果隐式事务报错,即单个SQL语句报错,继续保持下一个事务特性。 6 tx_read_only 设置事务的访问模式。tx_read_only和transaction_read_only是同义词。 GaussDB中只支持查询,不支持修改。 7 default_transaction_read_only 设置事务的访问模式。 GaussDB中通过SET设置会改变会话级事务访问模式;MySQL中不支持该系统参数。
  • 控制语句 表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语言
  • 数据类型兼容性 表1 其他PL/SQL数据类型 序号 Oracle数据库 GaussDB数据库 差异 1 CHARACTER 支持,有差异 GaussDB中字节长度限制为:1~10485760。 Oracle中字节长度限制为:1~32767。 2 VARCHAR 支持,有差异 GaussDB中字节长度限制为:1~10485760。 Oracle中字节长度限制为:1~32767。 3 STRING 不支持 - 4 PLS_INTEGER 不支持 GaussDB中可使用INT类型替代。 5 BINARY_INTEGER 支持 - 父主题: PL/SQL语言
  • SQL查询和子查询 GaussDB数据库兼容除分层查询以外的SQL查询和子查询。 表1 SQL查询和子查询 序号 Oracle数据库 GaussDB数据库 差异 1 创建简单查询 支持 - 2 分层查询 支持,有差异 GaussDB仅支持Oracle中的CONNECT_BY_FILTERING 模式,不支持CONNECT_BY_NOFILTERING。 3 UNION [ALL],INTERSECT,减运算符 支持 - 4 查询结果排序 支持,有差异 GaussDB查询不包含分组,且目标列同时包含聚集函数和集合返回函数时,不忽略对集合返回函数列的排序。 5 Joins 支持,有差异 GaussDB只支持和Oracle的Join Types, 如 left/right、self 、natural、full outer join等。不支持 In-Memory Join Group 等 Join Optimizations方法。 6 使用子查询 支持 - 7 嵌套子查询的解嵌套 支持,有差异 GaussDB不支持显式指定HASH_AJ或MERGE_AJ。 8 分布式查询 支持,有差异 GaussDB需要显式指定DBLINK查询。 9 聚集函数嵌套 支持 - 父主题: 集中式版
  • 字符集 GaussDB数据库支持指定数据库、模式、表或列的字符集,支持的范围如下。 表1 字符集列表 序号 MySQL数据库 GaussDB数据库 1 utf8mb4 支持 2 utf8 支持 3 gbk 支持 4 gb18030 支持 5 binary 支持 utf8和utf8mb4在GaussDB中为同一个字符集,编码最大长度为4字节。当前字符串字符集为utf8,指定其字符序为utf8mb4_bin/utf8mb4_general_ci/utf8mb4_unicode_ci/utf8mb4_0900_ai_ci时(例如select _utf8'a' collate utf8mb4_bin),MySQL中会发生报错,GaussDB不报错。当字符串字符集为utf8mb4,指定其字符序为utf8_bin/utf8_general_ci/utf8_unicode_ci时,存在同样差异。 词法语法解析按照字节流解析,当多字节字符中包含与'\', '\'', '\\'等符号一致的编码时,会导致与mysql行为不一致,建议暂时关闭转义符开关进行规避。 目前GaussDB对不属于当前字符集的非法字符未执行严格的编码逻辑校验,可能导致此类非法字符成功输入。而MySQL会校验报错。 父主题: MySQL数据库兼容性M-Compatibility模式
  • 区域和可用区 区域和可用区用来描述数据中心的位置,您可以在特定的区域、可用区创建资源。 区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为通用Region和专属Region,通用Region指面向公共租户提供通用云服务的Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用Region。 可用区(AZ,Availability Zone):一个AZ是一个或多个物理数据中心的集合,有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个实例。一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统的需求。 图1阐明了区域和可用区之间的关系。 图1 区域和可用区 目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和可用区。更多信息请参见华为云全球站点。
  • 安全限制 表4 安全限制 限制项 说明 管理员账户root权限 创建实例页面只提供管理员root用户权限。 说明: 在2022.08.30后,GaussDB为root用户开放了sysadmin权限。新创建实例的root用户都将拥有sysadmin权限,而存量实例执行版本升级后,root用户也将拥有sysadmin权限,如果需要进行版本升级,请联系技术支持处理。 如果存量实例未进行版本升级,则管理员root用户权限为:createrole,createdb和monadmin。由于旧版本root权限低于完整的管理员用户权限, 部分SQL语法/函数执行时会报权限不足,例如:create tablespace 等 管理员账户root的密码 长度为8~32个字符。 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为~!@#%^*-_=+?,)四类字符中的三类字符。 更多信息,请参见重置管理员密码。 数据库端口 设置范围为1024~39989(其中2378~2380、2400、4999~5001、5100、5500、5999~6001、6009~6010、6500、8015、8097、8098、8181、9090、9100、9180、9187、9200、12016、12017、20049、20050、21731、21732、32122~32126、39001被系统占用不可设置)。 更多信息,请参见修改数据库端口。 磁盘加密 购买磁盘加密后,在实例创建成功后不可修改磁盘加密状态,且无法更改密钥。 虚拟私有云 目前GaussDB实例创建完成后不支持切换虚拟私有云。 安全组 默认情况下,一个租户可以创建500条安全组规则。 建议一个安全组内的安全组规则不超过50条。更多信息,请参见设置安全组规则。 系统账户 创建GaussDB数据库实例时,系统会自动为实例创建如下系统账户(用户不可使用),用于给数据库实例提供完善的后台运维管理服务。 rdsAdmin:管理账户,拥有最高权限。 rdsBackup:备份账户,用于后台的备份。 rdsRepl:主备同步账户,用于备实例在主实例上同步数据。 root:系统管理员账户。 rdsMetric:指标监控账户,获取GaussDB的性能指标,用于上报到Cloud Eye供租户查看GaussDB运行情况。
  • 实例操作限制 表5 实例操作限制 功能 使用限制 数据库访问 如果GaussDB实例未开通公网访问,则该实例必须与云主机弹性云服务器处在同一个虚拟私有云子网内才能相互访问。 弹性云服务器必须处于目标GaussDB实例所属安全组允许访问的范围内。 如果GaussDB实例与弹性云服务器处于不同的安全组,系统默认不能访问。需要在GaussDB的安全组添加一条“入”的访问规则。 GaussDB实例的默认端口为8000。 数据库端口支持创建时设置,后期可修改。 部署 实例所部署的服务器,对用户都不可见,即只允许应用程序通过IP地址和端口访问数据库。 重启GaussDB实例 无法通过命令行重启,必须通过GaussDB的管理控制台操作重启实例。 GaussDB备份查看 GaussDB实例在 对象存储服务 上的备份文件,对用户不可见。 变更配置 默认不支持将规格参数变小,如需要将规格参数变小,您可以联系华为云技术支持,由华为云工程师给出分析评估后进行处理。 规格变更前,须确保实例状态正常。在实例异常、节点异常、磁盘满的情况下不允许进行规格变更。 高可用(1主2备)部署形态下,规格变更过程中会进行主备倒换,主备倒换过程中会有1min左右的业务中断。 单副本的部署形态下,规格变更过程中会进行中断重启,中断重启过程中会有5~10min的业务中断。 修改CPU/内存后,将会重启数据库实例,重启数据库实例将导致数据库业务短暂中断。 故障切换 对于集中式版,主节点切换备节点,大概有10s左右服务不可用。 数据恢复 为避免数据丢失,建议数据恢复前备份重要数据。 存储空间 若实例的磁盘空间已满,此时不可进行数据库写入操作,您需要扩容磁盘使实例恢复到正常状态。建议定期检查存储空间。 性能优化 性能调优过程有时候需要重启集群,可能会中断当前业务。 回收站管理 支持将退订后的包年/包月实例和删除的按需实例,加入回收站管理。通过数据库回收站中重建实例功能,可以恢复1~7天内删除的实例。 回收站策略机制默认开启,默认保留时间为7天,且不可关闭。
  • 规格与限制 表1 规格说明 资源类型 规格 说明 存储空间 集中式版:40GB~24000GB 分布式版:120GB~72000GB 对于SSD云盘和极速型SSD,如果您想提高存储空间扩容上限到10TB,请联系客服申请。 连接数 最小值为10,理论最大值为262143,实际最大值为动态值。 不同内存规格下的最大连接数不同,请参见最大连接数配置。 IOPS 超高IO:最大50000 极速型SSD:最大128000 SSD云盘和极速型SSD支持的IOPS取决于云硬盘(Elastic Volume Service,简称EVS)的IO性能,具体请参见《云硬盘产品介绍》中“磁盘类型及性能介绍”中“超高IO”和“极速型SSD”的内容。
  • 命名限制 表3 命名限制 限制项 说明 实例名称 长度在4个到64个字符之间。 必须以字母开头(区分大小写),可以包含字母、数字、中划线或下划线,不能包含其他特殊字符。 备份名称 长度在4~64个字符之间。 必须以字母开头,区分大小写,可以包含字母、数字、中划线或者下划线,不能包含其他特殊字符。 参数模板名称 长度在1~64个字符之间。 区分大小写,可包含字母、数字、中划线、下划线或句点,不能包含其他特殊字符。
  • 配额限制 表2 配额限制 资源类型 限制 说明 标签 1个实例最多支持20个标签配额。 更多信息,请参见标签。 免费备份空间 GaussDB提供了和实例磁盘大小相同的部分免费存储空间,用于存放您的备份数据。 免费的存储空间是在收取了数据盘的存储空间费用后赠送的,更多信息,请参见GaussDB的备份是如何收费的。 自动备份保留天数 默认为7天,可设置范围为1~732天。 更多信息,请参见设置实例级自动备份策略。
  • 数据类型兼容性 表1 其他PL/SQL数据类型 序号 Oracle数据库 GaussDB数据库 差异 1 CHARACTER 支持,有差异 GaussDB中字节长度限制为:1~10485760。 Oracle中字节长度限制为:1~32767。 2 VARCHAR 支持,有差异 GaussDB中字节长度限制为:1~10485760。 Oracle中字节长度限制为:1~32767。 3 STRING 不支持 - 4 PLS_INTEGER 不支持 GaussDB可使用int类型替代。 5 BINARY_INTEGER 支持 - 表2 用户自定义PL/SQL子类型 序号 Oracle数据库 GaussDB数据库 差异 1 SUBTYPE subtype_name IS base_type 支持 - 2 SUBTYPE subtype_name IS base_type { precision [, scale ] | RANGE low_value .. high_value } [ NOT NULL ] 支持,有差异 GaussDB仅INT类型支持range约束。Oracle仅PLS_INTEGER、BINARY_INTEGER及其预定义子类型支持RANGE约束。 GaussDB中在定义变量时,不支持指定range约束。 GaussDB中,subtype基类型为字符数据类型时,不支持指定字符集信息。 3 SUBTYPE subtype_name IS base_type [ NOT NULL ] 支持 - 父主题: PL/SQL语言
  • GaussDB各版本生命周期 表1 GaussDB各版本生命周期 GaussDB版本号 华为云Release时间 华为云EOM时间 华为云EOFS时间 华为云EOS时间 V2.0-1.4 2021年7月 2022年12月 2023年12月 2024年6月 V2.0-2.0 2021年11月 2022年12月 2025年12月 2026年6月 V2.0-2.3 2022年6月 2023年12月 2026年12月 2027年6月 V2.0-2.7 2022年11月 2023年12月 2026年12月 2027年6月 V2.0-2.8 2023年9月 2023年12月 2026年12月 2027年6月 V2.0-3.208 2023年7月 2024年12月 2027年6月 2027年12月 V2.0-3.222 2023年9月 2024年12月 2027年6月 2027年12月 V2.0-3.223 2023年12月 2024年12月 2027年6月 2027年12月 V2.0-3.226 2024年5月 2024年12月 2027年6月 2027年12月 V2.0-8.201 2024年11月 2026年3月 2028年12月 2029年6月 Release:华为云Release时间指华为云版本发布时间,一般指商用发布到官网时间。 EOM:End of Marketing,停止该版本的销售,指停止云服务版本的销售和部署,现网中不再部署该云服务版本。 EOFS:End of Full Support,版本停止全面支持,指对版本新发现的缺陷停止修复,不再提供新的补丁版本,EOFS之后发现的缺陷将继续进行根因分析并在下一个版本修复, 但版本EOS前都要求具备缺陷和1、2级漏洞的修复能力。 EOS:End of Service & support,停止该版本的服务与支持。云服务版本EOS后,华为云可不再提供针对该版本的任何技术服务支持,包含新问题的定位和缺陷修复等,只能通过升级新版本来解决问题。请遵循华为云生命周期政策,及时进行软件版本升级。
  • 数组类型的字符串输出 一个数组值的输出表现形式由该数组元素类型的输出再加上一些标明该数组结构的修饰组成。这些修饰由围绕在数组值周围的花括号(“{ ”和“}”)加上相邻项之间的分隔字符组成。在多维数组里, 每个维都有自己级别的花括号,并且在同级相邻的花括号项之间包含分隔符。 数组类型数据包含特殊字符(下述说明中的字符),字符串输出示例: gaussdb=# SELECT ARRAY['{', '}', 'hello, world', '"', '\', ' ', NULL] AS RESULT; array ---------------------------------------------- {"{","}","hello, world","\"","\\"," ",NULL} (1 row) 对于数组字符串常量输出,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白 或者元素为NULL,则这些元素输出时会输出双引号中,双引号和反斜杠则会被反斜杠转义额外输出一个反斜杠。与字符串常量输入相对应。
  • 数组类型的定义 一个数组数据类型一般通过在数组元素的数据类型名称后面加上方括号([])来命名。 示例一,创建一个名为sal_emp的表,它有一个表示雇员姓名类型为text的列(name),一个表示雇员季度工资的数组且元素类型为integer的列(pay_by_quarter),一个表示雇员手机号码的数组且元素类型为varchar(11)的列(phone_numbers): gaussdb=# CREATE TABLE sal_emp ( name text, pay_by_quarter integer[], phone_numbers varchar(11)[] ); gaussdb=# DROP TABLE sal_emp; 示例二,其他方式定义一个数组类型,具体定义方法和定义行为参考示例中的注释: gaussdb=# CREATE TABLE sal_emp ( name text, pay_by_quarter1 integer[][], -- int类型的二维数组 pay_by_quarter2 integer[3], -- int类型的一维数组,尺寸大小为3 pay_by_quarter3 integer[3][3], -- int类型的二维数组,每一维尺寸大小为3 pay_by_quarter4 integer ARRAY, -- int类型的一维数组 pay_by_quarter5 integer ARRAY[3] -- int类型的一维数组,尺寸大小为3 ); gaussdb=# DROP TABLE sal_emp; 数组的维数定义功能并不生效(不影响运行时的行为),建议采用示例一的方式定义数组类型,并且不建议使用多维数组数据。 数组的尺寸定义功能并不生效(不影响运行时的行为),建议采用示例一的方式定义数组类型。 允许的数组数据维数最大为6。 数组元素个数限制如下: 元素个数最大为134217727个。 所有元素加起来最大存储空间不超过1GB - 1字节即1073741823字节。
  • 数组类型的使用 数组类型的使用示例如下: -- 创建有数组类型列的表,并插入一些数据 gaussdb=# CREATE TABLE orders ( name varchar, items varchar[] ); gaussdb=# INSERT INTO orders VALUES('a', ARRAY['苹果', '橘子', '梨']); gaussdb=# INSERT INTO orders VALUES('b', ARRAY['矿泉水', '可乐', '雪碧']); gaussdb=# INSERT INTO orders VALUES('c', ARRAY['鼠标', '键盘', '耳机']); gaussdb=# INSERT INTO orders VALUES('d', '{白菜, 土豆, 茄子}'); -- 查询数据 gaussdb=# SELECT * FROM orders ORDER BY name; name | items ------+-------------------- a | {苹果,橘子,梨} b | {矿泉水,可乐,雪碧} c | {鼠标,键盘,耳机} d | {白菜,土豆,茄子} (4 rows) -- 访问数组元素 gaussdb=# SELECT items[1] FROM orders ORDER BY name; items -------- 苹果 矿泉水 鼠标 白菜 (4 rows) -- 访问元素超过范围或者访问下标为NULL时会返回NULL gaussdb=# SELECT items[4] FROM orders ORDER BY name; items ------- (4 rows) gaussdb=# SELECT items[null] FROM orders ORDER BY name; items ------- (4 rows) -- 访问子数组 gaussdb=# SELECT items[1:2] FROM orders ORDER BY name; items --------------- {苹果,橘子} {矿泉水,可乐} {鼠标,键盘} {白菜,土豆} (4 rows) -- 更新整个数组 gaussdb=# UPDATE orders SET items = ARRAY['香蕉', '西瓜', '草莓'] WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {香蕉,西瓜,草莓} (1 row) -- 更新数组的元素 gaussdb=# UPDATE orders SET items[1] = '芒果' WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {芒果,西瓜,草莓} (1 row) -- 更新数组的元素片段 gaussdb=# UPDATE orders SET items[1:2] = ARRAY['电脑', '手机'] WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items ------------------ {电脑,手机,耳机} (1 row) -- 添加数组元素,位于原数组最后一个元素和这个新元素之间的未赋值元素为NULL gaussdb=# UPDATE orders SET items[4] = '显示器' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items ------------------------- {电脑,手机,耳机,显示器} (1 row) gaussdb=# UPDATE orders SET items[6] = '显示器2' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items -------------------------------------- {电脑,手机,耳机,显示器,NULL,显示器2} (1 row) gaussdb=# DROP TABLE orders;
  • 数组构造器 数组构造器是一个能构建数组值的表达式。简单的数组构造器由关键词ARRAY、“[”、用于数组元素值的表达式列表(用逗号分隔)以及最后的“]”组成。示例如下: gaussdb=# SELECT ARRAY[1, 2, 3 + 4]; array --------- {1,2,7} (1 row) 默认情况下,数组的元素类型是成员表达式的公共类型,使用和UNION或CASE结构(UNION,CASE和相关构造)相同的规则决定。可以通过显式类型转换将数组构造为想要的数据类型,示例如下: gaussdb=# SELECT ARRAY[1, 2, 3]::varchar[]; array --------- {1,2,3} (1 row) gaussdb=# SELECT ARRAY['a', 'b', 'c']; array --------- {a,b,c} (1 row) gaussdb=# SELECT ARRAY['a', 'b', 'c']::int[]; ERROR: invalid input syntax for integer: "a" LINE 1: select ARRAY['a', 'b', 'c']::int[]; ^ CONTEXT: referenced column: array gaussdb=# SELECT ARRAY[1::int, 'b', 'c']; ERROR: invalid input syntax for integer: "b" LINE 1: select ARRAY[1::int, 'b', 'c']; ^ CONTEXT: referenced column: array 除预置的基础类型外,record类型和表类型也可以定义其数组类型,示例: gaussdb=# CREATE TYPE rec IS (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::rec[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# CREATE TABLE tab (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::tab[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# DROP TYPE rec; gaussdb=# DROP TABLE tab; 因为数组必须得有类型,因此在构造一个空数组时,必须明确的将其构造成需要的类型,示例: gaussdb=# SELECT ARRAY[]::int[]; array ------- {} (1 row) 我也可以从子查询的结果中构造一个数组。此时, 数组构造器是关键字ARRAY后跟着用圆括号括起来的子查询,子查询必须只返回一个单独的字段。生成的一维数组将为子查询里每行结果生成一个元素, 元素类型匹配子查询的输出字段。示例: gaussdb=# SELECT ARRAY(select generate_series(1, 6)); array --------------- {1,2,3,4,5,6} (1 row) 多维数组值可以通过嵌套数组构造器的方法来制作。内层构造器中的ARRAY关键字可以省略。比如,下面两个示例是同样的结果: gaussdb=# SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]]; array --------------- {{1,2},{3,4}} (1 row) gaussdb=# SELECT ARRAY[[1,2], [3,4]]; array --------------- {{1,2},{3,4}} (1 row) 同层的内层构造器必须生成同维的子数组。 任何应用于外层ARRAY构造器的类型转换自动的应用到所有的内层构造器。
  • 数组类型的字符串输入 要把一个数组值写成一个文字常数(常量输入),将元素值用花括号包围并用逗号分隔。因此,一个数组常量的一般格式如下: '{ val1 delim val2 delim ... }' 上述格式中的delim是元素类型的分隔符,记录在类型的pg_type表的typdelim列中。每个val可以是数组元素类型的一个常量,也可以是一个子数组。示例如下: gaussdb=# SELECT '{1, 2, 3}'::int[] AS RESULT; result --------- {1,2,3} (1 row) gaussdb=# SELECT '{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}'::int[] AS RESULT; result --------------------------- {{1,2,3},{4,5,6},{7,8,9}} (1 row) 在任意元素值周围可以使用双引号,并且在元素值包含逗号或花括号等一些特殊字符时必须使用双引号。示例如下: gaussdb=# SELECT '{" ", "NULL", null, "\\", "{", "}", ","}'::varchar[] AS RESULT; result ------------------------------------ {" ","NULL",NULL,"\\","{","}",","} (1 row) -- 该示例表示有一个varchar类型的数组,且一共有7个varchar元素,元素依次为: 1、包含一个空格的字符串 2、值为“NULL”的字符串 3、字符串为NULL 4、有一个\字符的字符串 5、有一个{字符的字符串 6、有一个}字符的字符串 7、有一个,字符的字符串 对于数组字符串常量输入,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白或者匹配关键字NULL。则这些元素输入需要使用双引号,在元素值里包含的双引号和反斜杠时需要额外添加一个反斜杠。 关键字NULL不区分大小写。 输入会自动跳过没有使用双引号的空白。 一般不建议使用字符常量的方式构造数组数据,推荐使用ARRAY构造器。
  • audit_thread_num 参数说明:审计线程的个数。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1~48 默认值:1 当audit_dml_state开关打开且在高性能场景下,建议增大此参数保证审计消息可以被及时处理和记录。 请保证此参数不大于审计目录下审计文件个数的最大值audit_file_remain_threshold,否则会导致审计功能无法正常使用与数据库异常。
  • audit_file_remain_threshold 参数说明:审计目录下审计文件个数的最大值。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,100~1048576 默认值: 1048576(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存);1024(4核CPU/16G内存) 请尽量保证此参数为1048576,并不要随意调整此参数,否则可能会导致audit_resource_policy无法生效,如果需要控制审计日志的存储空间和时间,请使用audit_resource_policy、audit_space_limit和audit_file_remain_time参数进行控制。 多审计线程场景下不建议调整此参数,请保证此参数不小于审计线程个数audit_thread_num,否则会导致审计功能无法正常使用与数据库异常。
  • audit_rotation_interval 参数说明:指定创建一个新审计日志文件的时间间隔。当现在的时间减去上次创建一个审计日志的时间超过了此参数值时,服务器将生成一个新的审计日志文件。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1~INT_MAX/60,单位为min。 默认值:1d 请不要随意调整此参数,否则可能会导致audit_resource_policy无法生效,如果需要控制审计日志的存储空间和时间,请使用audit_resource_policy、audit_space_limit和audit_file_remain_time参数进行控制。
  • audit_rotation_size 参数说明:指定审计日志文件的最大容量。当审计日志消息的总量超过此参数值时,服务器将生成一个新的审计日志文件。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1024~1048576,单位为KB。 默认值:10MB 请不要随意调整此参数,否则可能会导致audit_resource_policy无法生效,如果需要控制审计日志的存储空间和时间,请使用audit_resource_policy、audit_space_limit和audit_file_remain_time参数进行控制。 审计日志文件中记录的单条日志占用空间大小超过此参数值时会被作为无效日志文件。
  • audit_directory 参数说明:审计文件的存储目录。可以是相对于数据目录data的相对路径,也可以是绝对路径,自行指定,仅sysadmin用户可以访问。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 默认值:pg_audit。如果使用om工具部署数据库,则审计日志路径为“$GAUSS LOG /pg_audit/实例名称”。 不同的DN实例需要设置不同的审计文件存储目录,否则会导致审计日志异常。 当配置文件中audit_directory的值为非法路径时,会导致审计功能无法使用。
  • 注意事项 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小为0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 使用JDBC时,支持通过PrepareStatement对DEFAULT值进行参数化设置。 被授予CREATE ANY TABLE权限的用户,可以在public模式和用户模式下创建表。如果想要创建包含serial类型列的表,还需要授予CREATE ANY SEQUENCE创建序列的权限。 XML类型不能作为主键、外键。 表约束个数不能超过32767个。
  • 语法格式 创建表。 CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ({ column_name data_type [ CHARACTER SET | CHARSET charset ] [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ]) [ AUTO_INCREMENT [ = ] value ] [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ] [ COMPRESS | NOCOMPRESS ] [ TABLESPACE tablespace_name ]; 其中列约束column_constraint为: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) [STORED] | AUTO_INCREMENT | UNIQUE [KEY] index_parameters | ENCRYPTED WITH ( COLUMN_ENCRYPTION_KEY = column_encryption_key, ENCRYPTION_TYPE = encryption_type_value ) | PRIMARY KEY index_parameters | REFEREN CES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中列的压缩可选项compress_mode为: { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS } 其中表约束table_constraint为: [ CONSTRAINT [ constraint_name ] ] { CHECK ( expression ) | UNIQUE [ index_name ][ USING method ] ( { { column_name | ( expression ) } [ ASC | DESC ] } [, ... ] ) index_parameters | PRIMARY KEY [ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | FOREIGN KEY [ index_name ] ( column_name [, ... ] ) REFERENCES reftable [ (refcolumn [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中like选项like_option为: { INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | ALL } 其中索引参数index_parameters为: [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
共100000条