华为云用户手册

  • lc_monetary 参数说明:设置货币值的显示格式,影响to_char之类的函数的输出。可接受的值是系统相关的。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 使用命令locale -a查看当前系统支持的区域和相应的编码格式,并可以选择进行设置。 默认情况下,gs_initdb会根据当前的系统环境初始化此参数,通过locale命令可以查看当前的配置环境。 若该参数通过执行gs_guc reload修改时,如果当前节点上的某个session的连接不是来自于客户端,而是来自于该节点所属集群上的其他节点,那么执行gs_guc reload后该参数在该session上不会立即生效,需与连接节点断开连接后重新连接才会生效。 默认值:C
  • global_streaming_hadr_rto_and_rpo_stat global_streaming_hadr_rto_and_rpo_stat视图显示流式容灾的主集群和备集群日志流控信息(只可在主集群的CN使用,DN以及备集群上均不可获取到统计信息)。 表1 global_streaming_hadr_rto_and_rpo_stat参数说明 参数 类型 描述 hadr_sender_node_name text 节点的名称,包含主集群和备集群首备。 hadr_receiver_node_name text 备集群首备名称。 current_rto int 流控的信息,当前主备集群的日志rto时间(单位:秒)。 target_rto int 流控的信息,目标主备集群间的rto时间(单位:秒)。 current_rpo int 流控的信息,当前主备集群的日志rpo时间(单位:秒)。 target_rpo int 流控的信息,目标主备集群间的rpo时间(单位:秒)。 rto_sleep_time int RTO流控信息,为了达到目标RTO,预期主机walsender所需要的睡眠时间(单位:微秒)。 rpo_sleep_time int RPO流控信息,为了达到目标RPO,预期主机xlogInsert所需要的睡眠时间(单位:微秒)。 父主题: RTO & RPO
  • 优化说明 通常优化器总会选择最优的执行计划,但是众所周知代价估算,尤其是中间结果集的代价估算一般会有比较大的偏差,这种比较大的偏差就可能会导致agg的计算方式出现比较大的偏差,这时候就需要通过best_agg_plan进行agg计算模型的干预。 一般来说,当agg汇聚的收敛度很小时,即结果集的个数在agg之后并没有明显变少时(经验上以5倍为临界点),选择redistribute+hashagg执行方式,否则选择hashagg+redistribute+hashagg执行方式。
  • JSONB高级特性 注意事项 不支持作为分区键。 不支持外表、mot。 JSON和JSONB的主要差异在于存储方式上的不同,JSONB存储的是解析后的二进制,能够体现JSON的层次结构,更方便直接访问等,因此JSONB会有很多JSON所不具有的高级特性。 格式归一化 对于输入的object-json字符串,解析成jsonb二进制后,会天然的丢弃语义上无关紧要的细节,比如空格: openGauss=# select ' [1, " a ", {"a" :1 }] '::jsonb; jsonb ---------------------- [1, " a ", {"a": 1}] (1 row) 对于object-json,会删除重复的键值,只保留最后一个出现的,如: openGauss=# select '{"a" : 1, "a" : 2}'::jsonb; jsonb ---------- {"a": 2} (1 row) 对于object-json,键值会重新进行排序,排序规则:长度长的在后、长度相等则ascii码大的在后,如: openGauss=# select '{"aa" : 1, "b" : 2, "a" : 3}'::jsonb; jsonb --------------------------- {"a": 3, "b": 2, "aa": 1} (1 row)
  • SESSION_CPU_RUNTIME SESSION_CPU_RUNTIME视图显示当前用户执行复杂作业(正在运行)时的CPU使用信息。 表1 SESSION_CPU_RUNTIME字段 名称 类型 描述 datid oid 连接后端的数据库OID。 usename name 登录到该后端的用户名。 pid bigint 后端线程ID。 start_time timestamp with time zone 语句执行的开始时间。 min_cpu_time bigint 语句在所有DN上的最小CPU时间,单位为ms。 max_cpu_time bigint 语句在所有DN上的最大CPU时间,单位为ms。 total_cpu_time bigint 语句在所有DN上的CPU总时间,单位为ms。 query text 正在执行的语句。 node_group text 语句所属用户对应的Node group。 top_cpu_dn text cpu使用量topN信息。 父主题: Session/Thread
  • 语法格式 创建表。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UN LOG GED ] TABLE [ IF NOT EXISTS ] table_name ({ column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ]) [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ] [ TABLESPACE tablespace_name ] [ DISTRIBUTE BY { REPLICATION | HASH ( column_name [, ...] ) | RANGE ( column_name [, ...] ) { SLICE REFEREN CES tablename | ( slice_less_than_item [, ...] ) | ( slice_start_end_item [, ...] ) } | LIST ( column_name [, ...] ) { SLICE REFERENCES tablename | ( slice_values_item [, ...] ) } } ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]; 其中列约束column_constraint为: 1 2 3 4 5 6 7 8 9 10 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | UNIQUE [ index_parameters ] | PRIMARY KEY [ index_parameters ] | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中表约束table_constraint为: 1 2 3 4 5 6 [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE ( column_name [, ... ] ) [ index_parameters ] | PRIMARY KEY ( column_name [, ... ] ) [ index_parameters ] | PARTIAL CLUSTER KEY ( column_name [, ... ] ) } [ DEFERRABLE | NOT DEFERRABLE| INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中like选项like_option为: 1 { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL } 其中RANGE分布规则 slice_less_than_item为: SLICE slice_name VALUES LESS THAN ({ literal | MAXVALUE } [, ...]) [ DATANODE dn_name ] slice_start_end_item为: SLICE slice_name_prefix { { START ( literal ) END ( literal ) EVERY ( literal ) } | { START ( literal ) END ( { literal | MAXVALUE } ) } | { START ( literal ) } | { END ( { literal | MAXVALUE } ) } } 其中LIST分布规则slice_values_item为: SLICE slice_name VALUES (list_values_item) [DATANODE dn_name] list_values_item为: { DEFAULT | { partition_values_list [, ...] } } partition_values_list为: { (literal [, ...]) } 其中索引参数index_parameters为: 1 2 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 优化建议 UNLOGGED UNLOGGED表和表上的索引因为数据写入时不通过WAL日志机制,写入速度远高于普通表。因此,可以用于缓冲存储复杂查询的中间结果集,增强复杂查询的性能。 UNLOGGED表无主备机制,在系统故障或异常断点等情况下导致数据库重启,会清除UNLOGGED表数据,会有数据丢失风险,因此,不可用来存储基础数据。 TEMPORARY | TEMP 临时表只在当前会话可见,会话结束后会自动删除。 除了当前CN外,其他CN对于该临时表不可见。 LIKE 新表自动从这个表中继承所有字段名及其数据类型和非空约束,新表与源表之间在创建动作完毕之后是完全无关的。 LIKE INCLUDING DEFAULTS 源表上的字段缺省表达式只有在指定INCLUDING DEFAULTS时,才会复制到新表中。缺省是不包含缺省表达式的,即新表中的所有字段的缺省值都是NULL。 LIKE INCLUDING CONSTRAINTS 源表上的CHECK约束仅在指定INCLUDING CONSTRAINTS时,会复制到新表中,而其他类型的约束永远不会复制到新表中。非空约束总是复制到新表中。此规则同时适用于表约束和列约束。 LIKE INCLUDING INDEXES 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 LIKE INCLUDING STORAGE 如果指定了INCLUDING STORAGE,则复制列的STORAGE设置会复制到新表中,默认情况下不包含STORAGE设置。 LIKE INCLUDING COMMENTS 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释会复制到新表中。默认情况下,不复制源表的注释。 LIKE INCLUDING PARTITION 如果指定了INCLUDING PARTITION,则源表的分区定义会复制到新表中,同时新表将不能再使用PARTITION BY子句。默认情况下,不拷贝源表的分区定义。 LIKE INCLUDING RELOPTIONS 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)会复制到新表中。默认情况下,不复制源表的存储参数。 LIKE INCLUDING DISTRIBUTION 如果指定了INCLUDING DISTRIBUTION,则源表的分布信息会复制到新表中,包括分布类型和分布列,同时新表将不能再使用DISTRIBUTE BY子句。默认情况下,不拷贝源表的分布信息。 LIKE INCLUDING ALL INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS和INCLUDING DISTRIBUTION的内容。 ORIENTATION ROW 创建行存表,行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 DISTRIBUTE BY 事实表或者数据量较大的维度表建议创建为分布表。对指定的列进行Hash,通过映射,把数据分布到指定DN。语法为:distribute by hash(column_name)。 数据量较小的维度表建议创建为复制表。表的每条记录存在所有数据节点(DN)中,即每个数据节点都有完整的表数据。语法为: distribute by replication。
  • 注意事项 表中的主键约束和唯一约束必须包含分布列。 分布列不支持更新(UPDATE)操作。 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小为0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 使用JDBC时,支持通过PrepareStatement对DEFAULT值进行参数化设置。 行存表的表级约束不支持外键。 依据并发控制策略,drop table if exist和create if exist操作相同的表并发场景时,有一个会回滚。 被授予CREATE ANY TABLE权限的用户,可以在public模式和用户模式下创建表。如果想要创建包含serial类型列的表,还需要授予CREATE ANY SEQUENCE创建序列的权限。 如果在 GaussDB 中无限创建表,可能会对CN(Coordinator Node)造成以下影响: 资源耗尽:每个表都会占用一定的磁盘空间,无限创建表会导致大量的内存和磁盘空间被占用,可能会导致CN的资源耗尽,从而导致系统崩溃或变得不稳定。 性能下降:无限创建表会导致大量的I/O操作和CPU计算,数据库的元数据信息将会变得十分庞大,可能会导致CN的性能下降,包括插入、查询、更新和删除等操作,因此导致系统响应变慢或无法满足业务需求。 安全问题:过多的表会导致数据库的管理和维护变得困难,无限创建表可能会导致数据泄露或数据丢失等安全问题,数据库的稳定性会降低从而给企业带来不可估量的损失。 因此,对于应该合理规划表的数量和大小,避免无限创建表,从而保证系统的稳定性、可靠性和安全性。
  • PG_VIEWS PG_VIEWS视图显示数据库中每个视图的有用信息。 表1 PG_VIEWS字段 名称 类型 引用 描述 schemaname name PG_NAMESPACE.nspname 视图的模式名。 viewname name PG_CLASS.relname 视图名。 viewowner name PG_AUTHID.Erolname 视图的所有者。 definition text - 视图的定义。 父主题: 系统视图
  • 注意事项 不允许对一个已关闭的游标再做任何操作。 一个不再使用的游标应该尽早关闭。 当创建游标的事务用COMMIT或ROLLBACK终止之后,每个不可保持的已打开游标都隐含关闭。 当创建游标的事务通过ROLLBACK退出之后,每个可以保持的游标都将隐含关闭。 当创建游标的事务成功提交,可保持的游标将保持打开,直到执行一个明确的CLOSE或者客户端断开。 GaussDB没有明确打开游标的OPEN语句,因为一个游标在使用CURSOR命令定义的时候就打开了。可以通过查询系统视图pg_cursors看到所有可用的游标。
  • PG_SHSECLABEL PG_SHSECLABEL系统表存储在共享数据库对象上的安全标签。安全标签可以用SECURITY LABEL命令操作。 查看安全标签的简单点的方法,请参阅PG_SECLABELS。 PG_SECLABEL的作用类似,只是它是用于在单个数据库内部的对象的安全标签的。 不同于大多数的系统表,PG_SHSECLABEL在一个集群中的所有数据库中共享:每个数据库集群只有一个PG_SHSECLABEL,而不是每个数据库一个。 表1 PG_SHSECLABEL字段 名称 类型 引用 描述 objoid oid 任意OID属性 这个安全标签所属的对象的OID。 classoid oid PG_CLASS.oid 出现这个对象的系统目录的OID。 provider text - 与这个标签相关的标签提供程序。 label text - 应用于这个对象的安全标签。 父主题: 系统表
  • 参数说明 GRANT的权限分类如下所示。 SELECT 允许对指定的表、视图、序列执行SELECT语句。 INSERT 允许对指定的表执行INSERT语句。 UPDATE 允许对声明的表中任意字段执行UPDATE语句。SELECT… FOR UPDATE和SELECT… FOR SHARE除了需要SELECT权限外,还需要UPDATE权限。 DELETE 允许执行DELETE语句删除指定表中的数据。 TRUNCATE 允许执行TRUNCATE语句删除指定表中的所有记录。 REFERENCES 创建一个外键约束,必须拥有参考表和被参考表的REFERENCES权限,分布式场景暂不支持。 TRIGGER 允许在指定的表上创建触发器。 CREATE 对于数据库,允许在数据库里创建新的模式。 对于模式,允许在模式中创建新的对象。如果要重命名一个对象,用户除了必须是该对象的所有者外,还必须拥有该对象所在模式的CREATE权限。 对于表空间,允许在表空间中创建表,允许在创建数据库和模式的时候把该表空间指定为缺省表空间。 对于子集群,允许在子集群中创建表对象。 CONNECT 允许用户连接到指定的数据库。 EXECUTE 允许使用指定的函数,以及利用这些函数实现的操作符。 USAGE 对于过程语言,允许用户在创建函数的时候指定过程语言。 对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名称。 对于序列,USAGE允许使用nextval函数。 对于子集群, 对包含在指定模式中的对象有访问权限时,USAGE允许访问指定子集群下的表对象。 对于密钥对象,USAGE是使用密钥的权限。 COMPUTE 针对计算子集群,允许用户在具有compute权限的计算子集群上进行弹性计算。 ALTER 允许用户修改指定对象的属性,但不包括修改对象的所有者和修改对象所在的模式。 DROP 允许用户删除指定的对象。 COMMENT 允许用户定义或修改指定对象的注释。 INDEX 允许用户在指定表上创建索引,并管理指定表上的索引,还允许用户对指定表执行REINDEX和CLUSTER操作。 VACUUM 允许用户对指定的表执行ANALYZE和VACUUM操作。 ALL PRIVILEGES 一次性给指定用户/角色赋予所有可赋予的权限。只有系统管理员有权执行GRANT ALL PRIVILEGES。 GRANT的参数说明如下所示。 role_name 已存在用户名称。 table_name 已存在表名称。 column_name 已存在字段名称。 schema_name 已存在模式名称。 database_name 已存在数据库名称。 function_name 已存在函数名称。 sequence_name 已存在序列名称。 domain_name 已存在域类型名称。 fdw_name 已存在外部数据包名称。 lang_name 已存在语言名称。 type_name 已存在类型名称。 group_name 已存在的子集群名称。 argmode 参数模式。 取值范围:字符串,要符合标识符命名规范。 arg_name 参数名称。 取值范围:字符串,要符合标识符命名规范。 arg_type 参数类型。 取值范围:字符串,要符合标识符命名规范。 loid 包含本页的大对象的标识符。 取值范围:字符串,要符合标识符命名规范。 tablespace_name 表空间名称。 client_master_key 客户端加密主密钥的名称。 取值范围:字符串,要符合标识符命名规范。 column_encryption_key 列加密密钥的名称。 取值范围:字符串,要符合标识符命名规范。 directory_name 目录名称。 取值范围:字符串,要符合标识符命名规范。 WITH GRANT OPTION 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。 非对象所有者给其他用户授予对象权限时,命令按照以下规则执行: 如果用户没有该对象上指定的权限,命令立即失败。 如果用户有该对象上的部分权限,则GRANT命令只授予他有授权选项的权限。 如果用户没有可用的授权选项,GRANT ALL PRIVILEGES形式将发出一个警告信息,其他命令形式将发出在命令中提到的且没有授权选项的相关警告信息。 数据库系统管理员可以访问所有对象,而不会受对象的权限设置影响。除了必要的情况外,建议不要总是以系统管理员身份进行操作。
  • 示例 示例:将系统权限授权给用户或者角色。 创建名为joe的用户,并将sysadmin权限授权给他。 1 2 openGauss=# CREATE USER joe PASSWORD 'xxxxxxxxxx'; openGauss=# GRANT ALL PRIVILEGES TO joe; 授权成功后,用户joe会拥有sysadmin的所有权限。 示例:将对象权限授权给用户或者角色。 撤销joe用户的sysadmin权限,然后将模式tpcds的使用权限和表tpcds.reason的所有权限授权给用户joe。 1 2 3 4 5 6 7 8 9 10 openGauss=# CREATE SCHEMA tpcds; openGauss=# CREATE TABLE tpcds.reason ( r_reason_sk INTEGER NOT NULL, r_reason_id CHAR(16) NOT NULL, r_reason_desc VARCHAR(20) ); openGauss=# REVOKE ALL PRIVILEGES FROM joe; openGauss=# GRANT USAGE ON SCHEMA tpcds TO joe; openGauss=# GRANT ALL PRIVILEGES ON tpcds.reason TO joe; 授权成功后,joe用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。 将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe。 1 openGauss=# GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe; 授权成功后,用户joe对tpcds.reason表中r_reason_sk,r_reason_id, r_reason_desc的查询权限会立即生效。如果joe用户需要拥有将这些权限授权给其他用户的权限,可以通过以下语法对joe用户进行授权。 1 openGauss=# GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe WITH GRANT OPTION; 将数据库testdb的连接权限授权给用户joe,并给予其在testdb中创建schema的权限,而且允许joe将此权限授权给其他用户。 1 2 openGauss=# CREATE DATABASE testdb; openGauss=# GRANT create,connect on database testdb TO joe WITH GRANT OPTION; 创建角色tpcds_manager,将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人。 1 2 openGauss=# CREATE ROLE tpcds_manager PASSWORD 'xxxxxxxxxx'; openGauss=# GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager; 将表空间tpcds_tbspc的所有权限授权给用户joe,但用户joe无法将权限继续授予其他用户。 1 2 openGauss=# CREATE TABLESPACE tpcds_tbspc RELATIVE LOCATION 'tablespace/tablespace_1'; openGauss=# GRANT ALL ON TABLESPACE tpcds_tbspc TO joe; 示例:将用户或者角色的权限授权给其他用户或角色。 创建角色manager,将joe的权限授权给manager,并允许该角色将权限授权给其他人。 1 2 openGauss=# CREATE ROLE manager PASSWORD 'xxxxxxxxxxx'; openGauss=# GRANT joe TO manager WITH ADMIN OPTION; 创建用户senior_manager,将用户manager的权限授权给该用户。 1 2 openGauss=# CREATE ROLE senior_manager PASSWORD 'xxxxxxxxxxx'; openGauss=# GRANT manager TO senior_manager; 撤销权限,并清理用户。 1 2 3 openGauss=# REVOKE joe FROM manager; openGauss=# REVOKE manager FROM senior_manager; openGauss=# DROP USER manager; 示例:撤销上述授予的权限,并清理角色和用户。 1 2 3 4 5 6 7 8 9 10 openGauss=# REVOKE ALL PRIVILEGES ON tpcds.reason FROM joe; openGauss=# REVOKE ALL PRIVILEGES ON SCHEMA tpcds FROM joe; openGauss=# REVOKE ALL ON TABLESPACE tpcds_tbspc FROM joe; openGauss=# DROP TABLESPACE tpcds_tbspc; openGauss=# REVOKE USAGE,CREATE ON SCHEMA tpcds FROM tpcds_manager; openGauss=# DROP ROLE tpcds_manager; openGauss=# DROP ROLE senior_manager; openGauss=# DROP USER joe CASCADE; openGauss=# DROP TABLE tpcds.reason; openGauss=# DROP SCHEMA tpcds CASCADE;
  • 注意事项 不允许将ANY权限授予PUBLIC,也不允许从PUBLIC回收ANY权限。 ANY权限属于数据库内的权限,只对授予该权限的数据库内的对象有效,例如SELECT ANY TABLE只允许用户查看当前数据库内的所有用户表数据,对其他数据库内的用户表无查看权限。 ANY权限与原有的权限相互无影响。 如果用户被授予CREATE ANY TABLE权限,在同名schema下创建表的属主是该schema的创建者,用户对表进行其他操作时,需要授予相应的操作权限。 需要谨慎授予用户CREATE ANY FUNCTION或CREATE ANY PACKAGE的权限,以免其他用户利用DEFINER类型的函数或PACKAGE进行权限提升。
  • 功能描述 对角色和用户进行授权操作。 使用GRANT命令进行用户授权包括以下场景: 将系统权限授权给角色或用户 系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN、MONADMIN、OPRADMIN、POLADMIN、INHERIT、REPLICATION、VCADMIN和LOGIN等。 系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。 将数据库对象授权给角色或用户 将数据库对象(表、视图、指定字段、数据库、函数、模式、表空间等)的相关权限授予特定角色或用户; GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。 关键字PUBLIC表示该权限要赋予所有角色,包括以后创建的用户。PUBLIC可以看做是一个隐含定义好的组,它总是包括所有角色。任何角色或用户都将拥有通过GRANT直接赋予的权限和所属的权限,再加上PUBLIC的权限。 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC,这是GaussDB特有的属性。 GaussDB会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。 对象的所有者缺省具有该对象上的所有权限,出于安全考虑所有者可以舍弃部分权限,但ALTER、DROP、COMMENT、INDEX、VACUUM以及对象的可再授予权限属于所有者固有的权限,隐式拥有。 将角色或用户的权限授权给其他角色或用户 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。 当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。 数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。 将ANY权限授予给角色或用户 将ANY权限授予特定的角色和用户,ANY权限的取值范围参见语法格式。当声明了WITH ADMIN OPTION,被授权的用户可以将该ANY权限再次授予其他角色/用户,或从其他角色/用户处回收该ANY权限。ANY权限可以通过角色被继承,但不能赋予PUBLIC。初始用户和三权分立关闭时的系统管理员用户可以给任何角色/用户授予或撤销ANY权限。 目前支持以下ANY权限:CREATE ANY TABLE、ALTER ANY TABLE、DROP ANY TABLE、SELECT ANY TABLE、INSERT ANY TABLE、UPDATE ANY TABLE、DELETE ANY TABLE、CREATE ANY SEQUENCE、CREATE ANY INDEX、CREATE ANY FUNCTION、EXECUTE ANY FUNCTION、 CREATE ANY PACKAGE、EXECUTE ANY PACKAGE、CREATE ANY TYPE。详细的ANY权限范围描述参考表1。
  • 语法格式 将表或视图的访问权限赋予指定的用户或角色。 1 2 3 4 5 6 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将表中字段的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将序列的访问权限赋予指定的用户或角色。 1 2 3 4 5 6 GRANT { { SELECT | UPDATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { [ SEQUENCE ] sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将数据库的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将域的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 本版本暂时不支持赋予域的访问权限。 将外部数据源的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将外部服务器的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将函数的访问权限赋予给指定的用户或角色。 1 2 3 4 5 GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将存储过程的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将过程语言的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; Java和Internal只支持拥有sysadmin权限的用户创建。 将子集群的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { CREATE | USAGE | COMPUTE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将子集群的create权限赋予指定用户或角色时,会默认把usage和compute权限赋予指定用户或角色。 将模式的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { CREATE | USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名称,并不能实际进行对象访问。 将大对象的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 本版本暂时不支持大对象。 将表空间的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { CREATE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将类型的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { USAGE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 本版本暂时不支持赋予类型的访问权限。 将directory对象的权限赋予指定的角色。 1 2 3 4 GRANT { { READ | WRITE | ALTER | DROP } [, ...] | ALL [PRIVILEGES] } ON DIRECTORY directory_name [, ...] TO { [GROUP] role_name | PUBLIC } [, ...] [WITH GRANT OPTION]; 将package对象的权限赋予指定的角色。 1 2 3 4 GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [PRIVILEGES] } ON PACKAGE package_name [, ...] TO { [GROUP] role_name | PUBLIC } [, ...] [WITH GRANT OPTION]; 本版本暂不支持package对象。 将角色的权限赋予其他用户或角色的语法。 1 2 3 GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]; 将sysadmin权限赋予指定的角色。 1 2 GRANT ALL { PRIVILEGES | PRIVILEGE } TO role_name;
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 1 2 3 4 5 openGauss=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1) (1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4 (1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t (1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 1 2 3 4 5 openGauss=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t (1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4 (1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3 (1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 1 2 3 4 5 openGauss=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2 (1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 1 2 3 4 5 openGauss=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0)) (1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 1 2 3 4 5 openGauss=# SELECT popen(path '((0,0),(1,1),(2,0))') AS RESULT; result --------------------- [(0,0),(1,1),(2,0)] (1 row) radius(circle) 描述:计算圆的半径。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2 (1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 1 2 3 4 5 openGauss=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row)
  • FILE_IOSTAT 通过对数据文件I/O的统计,反映数据的I/O性能,用以发现I/O操作异常等性能问题。 表1 FILE_IOSTAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds bigint 读物理文件的数目。 phywrts bigint 写物理文件的数目。 phyblkrd bigint 读物理文件块的数目。 phyblkwrt bigint 写物理文件块的数目。 readtim bigint 读文件的总时长(单位:微秒)。 writetim bigint 写文件的总时长(单位:微秒)。 avgiotim bigint 读写文件的平均时长(单位:微秒)。 lstiotim bigint 最后一次读文件时长(单位:微秒)。 miniotim bigint 读写文件的最小时长(单位:微秒)。 maxiowtm bigint 读写文件的最大时长(单位:微秒)。 父主题: File
  • java.sql.Statement java.sql.Statement是SQL语句接口。 表1 对java.sql.Statement的支持情况 方法名 返回值类型 支持JDBC 4 addBatch(String sql) void Yes clearBatch() void Yes clearWarnings() void Yes close() void Yes closeOnCompletion() void Yes execute(String sql) Boolean Yes execute(String sql, int autoGeneratedKeys) Boolean Yes execute(String sql, int[] columnIndexes) Boolean Yes execute(String sql, String[] columnNames) Boolean Yes executeBatch() Boolean Yes executeQuery(String sql) ResultSet Yes executeUpdate(String sql) int Yes executeUpdate(String sql, int autoGeneratedKeys) int Yes executeUpdate(String sql, int[] columnIndexes) int Yes executeUpdate(String sql, String[] columnNames) int Yes getConnection() Connection Yes getFetchDirection() int Yes getFetchSize() int Yes getGeneratedKeys() ResultSet Yes getMaxFieldSize() int Yes getMaxRows() int Yes getMoreResults() boolean Yes getMoreResults(int current) boolean Yes getResultSet() ResultSet Yes getResultSetConcurrency() int Yes getResultSetHoldability() int Yes getResultSetType() int Yes getQueryTimeout() int Yes getUpdateCount() int Yes getWarnings() SQLWarning Yes isClosed() Boolean Yes isCloseOnCompletion() Boolean Yes isPoolable() Boolean Yes setCursorName(String name) void Yes setEscapeProcessing(boolean enable) void Yes setFetchDirection(int direction) void Yes setMaxFieldSize(int max) void Yes setMaxRows(int max) void Yes setPoolable(boolean poolable) void Yes setQueryTimeout(int seconds) void Yes setFetchSize(int rows) void Yes cancel() void Yes executeLargeUpdate(String sql) long No getLargeUpdateCount() long No executeLargeBatch() long No executeLargeUpdate(String sql, int autoGeneratedKeys) long No executeLargeUpdate(String sql, int[] columnIndexes) long No executeLargeUpdate(String sql, String[] columnNames) long No 通过setFetchSize可以减少结果集在客户端的内存占用情况。它的原理是通过将结果集打包成游标,然后分段处理,所以会加大数据库与客户端的通信量,会有性能损耗。 由于数据库游标是事务内有效,所以,在设置setFetchSize的同时,需要将连接设置为非自动提交模式,setAutoCommit(false)。同时在业务数据需要持久化到数据库中时,在连接上执行提交操作。 LargeUpdate相关方法必须在JDBC4.2及以上使用。 父主题: JDBC接口参考
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 -- 创建目标表products和源表newproducts,并插入数据 openGauss=# CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); openGauss=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); openGauss=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); openGauss=# INSERT INTO products VALUES (1600, 'play gym', 'toys'); openGauss=# INSERT INTO products VALUES (1601, 'lamaze', 'toys'); openGauss=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); openGauss=# CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); openGauss=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); openGauss=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); openGauss=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); openGauss=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); -- 进行MERGE INTO操作 openGauss=# MERGE INTO products p USING newproducts np ON (p.product_id = np.product_id) WHEN MATCHED THEN UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' WHEN NOT MATCHED THEN INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; MERGE 4 -- 查询更新后的结果 openGauss=# SELECT * FROM products ORDER BY product_id; product_id | product_name | category ------------+----------------+----------- 1501 | vivitar 35mm | electrncs 1502 | olympus camera | electrncs 1600 | play gym | toys 1601 | lamaze | toys 1666 | harry potter | toys 1700 | wait interface | books (6 rows) -- 删除表 openGauss=# DROP TABLE products; openGauss=# DROP TABLE newproducts;
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 MERGE [/*+ plan_hint */] INTO table_name [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ [ AS ] alias ] ON ( condition ) [ WHEN MATCHED THEN UPDATE SET { column_name = { expression | subquery | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ];
  • 参数说明 plan_hint子句 以/*+ */的形式在MERGE关键字后,用于对MERGE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 INTO子句 指定正在更新或插入的目标表。目标表为复制表时,暂不支持目标表中某列默认值为volatile函数(如自增列),enable_stream_operator=off时目标表需要包含主键或带有unique not null。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。目标表为复制表时,暂不支持USING子句中包含非复制表。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 WHERE condition UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。
  • 结构 PL/SQL块中可以包含子块,子块可以位于PL/SQL中任何部分。PL/SQL块的结构如下: 声明部分:声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数。 DECLARE 不涉及变量声明时声明部分可以没有。 对匿名块来说,没有变量声明部分时,可以省去DECLARE关键字。 对存储过程来说,没有DECLARE, AS相当于DECLARE。即便没有变量声明的部分,关键字AS也必须保留。 执行部分:过程及SQL语句,程序的主要部分。必选。 BEGIN 执行异常部分:错误处理。可选。 EXCEPTION 结束。必选。 END; / 禁止在PL/SQL块中使用连续的Tab,连续的Tab可能会造成在使用gsql工具带“-r”参数执行PL/SQL块时出现异常。
  • 注意事项 使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT删除一个保存点,但是保留该保存点建立后执行的命令的效果。 保存点只能在一个事务块里面建立。在一个事务里面可以定义多个保存点。 由于节点故障或者通信故障引起的分布式节点线程或进程退出导致的报错,以及由于COPY FROM操作中源数据与目标表的表结构不一致导致的报错,均不能正常回滚到保存点之前,而是整个事务回滚。 SQL标准要求,使用SAVEPOINT建立一个同名保存点时,需要自动删除前面那个同名保存点。在 GaussDB数据库 里,将保留旧的保存点,但是在回滚或者释放的时候,只使用最近的那个。释放了新的保存点将导致旧的再次成为ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT可以访问的保存点。除此之外,SAVEPOINT是完全符合SQL标准的。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 --创建一个新表。 openGauss=# CREATE TABLE table1(a int); --开启事务。 openGauss=# START TRANSACTION; --插入数据。 openGauss=# INSERT INTO table1 VALUES (1); --建立保存点。 openGauss=# SAVEPOINT my_savepoint; --插入数据。 openGauss=# INSERT INTO table1 VALUES (2); --回滚保存点。 openGauss=# ROLLBACK TO SAVEPOINT my_savepoint; --插入数据。 openGauss=# INSERT INTO table1 VALUES (3); --提交事务。 openGauss=# COMMIT; --查询表的内容,会同时看到1和3,不能看到2,因为2被回滚。 openGauss=# SELECT * FROM table1; --删除表。 openGauss=# DROP TABLE table1; --创建一个新表。 openGauss=# CREATE TABLE table2(a int); --开启事务。 openGauss=# START TRANSACTION; --插入数据。 openGauss=# INSERT INTO table2 VALUES (3); --建立保存点。 openGauss=# SAVEPOINT my_savepoint; --插入数据。 openGauss=# INSERT INTO table2 VALUES (4); --回滚保存点。 openGauss=# RELEASE SAVEPOINT my_savepoint; --提交事务。 openGauss=# COMMIT; --查询表的内容,会同时看到3和4。 openGauss=# SELECT * FROM table2; --删除表。 openGauss=# DROP TABLE table2;
  • agg_redistribute_enhancement 参数说明:当进行Agg操作时,如果包含多个group by列且均不为分布列,进行重分布时会选择某一group by列进行重分布。本参数控制选择重分布列的策略。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示会选择估算distinct值最多的一个可重分布列作为重分布列。 off表示会选择第一个可重分布列为重分布列。 默认值:off
  • enable_nodegroup_debug 参数说明:控制优化器在多Node Group环境下,是否使用强制弹性计算。Node Group目前为内部用机制,用户无需设置。 该参数只在expected_computing_nodegroup被设置为具体Node Group时生效。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示强制将计算弹性到expected_computing_nodegroup所指定的Node Group进行计算。 off表示不强制使用某个Node Group进行计算。 默认值:off
  • default_limit_rows 参数说明:设置生成genericplan的缺省limit估算行数。此参数设置为正数时意为直接将设置的值作为估算limit的行数;为正数小数时,自动取整;为负数时代表使用百分比的形式设置默认的估算值,负数转换为默认百分比,即-5代表5%。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:浮点型,-100~DBL_MAX。 默认值:-10
  • expected_computing_nodegroup 参数说明:标识选定的计算Node Group模式或目标计算Node Group。Node Group目前为内部用机制,用户无需设置。 共4种计算Node Group模式,用于关联操作和聚集操作时选定计算Node Group。在每一种模式中,优化器有针对性地选定几个候选计算Node Group,然后根据代价,从中为当前算子挑选最佳计算Node Group。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 optimal:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前用户具有COMPUTE权限的所有Node Group包含的所有DN构成的Node Group query:候选计算Node Group列表包含算子操作对象所在的Node Group和由当前查询涉及的所有基表所在Node Group包含的所有DN构成的Node Group Node Group名(enable_nodegroup_debug被设置为off):候选计算Node Group列表包含算子操作对象所在的Node Group和该指定的Node Group Node Group名(enable_nodegroup_debug被设置为on):候选计算Node Group为指定的Node Group 默认值:query
  • qrw_inlist2join_optmode 参数说明:控制是否使用inlist-to-join查询重写。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串 disable:关闭inlist2join查询重写。 cost_base:基于代价的inlist2join查询重写。 rule_base:基于规则的inlist2join查询重写,即强制使用inlist2join查询重写。 任意正整数:inlist2join查询重写阈值,即in子句内的list内元素个数大于该阈值,进行inlist2join查询重写。 默认值:cost_base
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全