华为云用户手册

  • ROW_NUMBER() 描述:ROW_NUMBER函数为各组内值生成连续排序序号,其中相同的值其序号也不相同。 返回值类型:BIGINT 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id, classid, score,ROW_NUMBER() OVER(ORDER BY score DESC) FROM score ORDER BY score DESC; id | classid | score | row_number ----+---------+-------+------------ 1 | 1 | 95 | 1 2 | 2 | 95 | 2 5 | 2 | 88 | 3 3 | 2 | 85 | 4 6 | 1 | 70 | 5 4 | 1 | 70 | 6 (6 rows)
  • 输入格式 json和jsonb输入必须是一个符合JSON数据格式的字符串,此字符串用单引号''声明。 null (null-json):仅null,全小写。 1 2 SELECT 'null'::json; -- suc SELECT 'NULL'::jsonb; -- err 数字 (num-json):正负整数、小数、0,支持科学计数法。 1 2 3 4 SELECT '1'::json; SELECT '-1.5'::json; SELECT '-1.5e-5'::jsonb, '-1.5e+2'::jsonb; SELECT '001'::json, '+15'::json, 'NaN'::json; -- 不支持多余的前导0,正数的+号,以及NaN和infinity。 布尔(bool-json):仅true、false,全小写。 1 2 SELECT 'true'::json; SELECT 'false'::jsonb; 字符串(str-json):必须是加双引号的字符串。 1 2 SELECT '"a"'::json; SELECT '"abc"'::jsonb; 数组(array-json):使用中括号[]包裹,满足数组书写条件。数组内元素类型可以是任意合法的JSON,且不要求类型一致。 1 2 3 SELECT '[1, 2, "foo", null]'::json; SELECT '[]'::json; SELECT '[1, 2, "foo", null, [[]], {}]'::jsonb; 对象(object-json):使用大括号{}包裹,键必须是满足JSON字符串规则的字符串,值可以是任意合法的JSON。 1 2 3 SELECT '{}'::json; SELECT '{"a": 1, "b": {"a": 2, "b": null}}'::json; SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::jsonb;
  • jsonb高级特性 json和jsonb的主要差异在于存储方式上的不同,jsonb存储的是解析后的二进制,能够体现JSON的层次结构,更便于直接访问等,因此jsonb较json具有很多高级特性。 格式归一化 对于输入的object-json字符串,解析成jsonb二进制后,会天然的丢弃语义上无关紧要的细节,比如空格: 1 2 3 4 5 SELECT ' [1, " a ", {"a" :1 }] '::jsonb; jsonb ---------------------- [1, " a ", {"a": 1}] (1 row) 对于object-json,会删除重复的键值,只保留最后一个出现的,例如: 1 2 3 4 5 SELECT '{"a" : 1, "a" : 2}'::jsonb; jsonb ---------- {"a": 2} (1 row) 对于object-json,键值会重新进行排序,排序规则:长度长的在后、长度相等则ascii码大的在后,例如: 1 2 3 4 5 SELECT '{"aa" : 1, "b" : 2, "a" : 3}'::jsonb; jsonb --------------------------- {"a": 3, "b": 2, "aa": 1} (1 row)
  • 注意事项 只有数据库所有者有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 不能对系统默认安装的三个数据库(gaussdb、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\l命令查看。 如果有用户正在与要删除的数据库连接,则删除操作失败。如果要查看当前存在哪些数据库连接,可以通过视图v$session查看。 不能在事务块中执行DROP DATABASE命令。 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 DROP DATABASE一旦执行将无法撤销,请谨慎使用。 DROP DATABASE若提示database is being accessed by other users类错误,可能原因为CLEAN CONNECTION过程存在线程无法及时响应信号,出现连接清理不完全的情况,需要再次执行CLEAN CONNECTION。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 CREATE [ [ GLOBAL | LOCAL | VOLATILE ] { TEMPORARY | TEMP } | UN LOG GED ] TABLE table_name [ (column_name [, ...] ) ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ COMPRESS | NOCOMPRESS ] [ DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { [HASH ] ( column_name ) } } ] [ COMMENT [=] 'text' ] AS query [ WITH [ NO ] DATA ];
  • 参数说明 [ GLOBAL | LOCAL | VOLATILE ] { TEMPORARY | TEMP } 指定临时表类型,包括GLOBAL/LOCAL/VOLATILE,具体可参考CREATE TABLE章节中•GLOBAL | LOCAL | VOLATI...。 UNLOGGED 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,它也是不安全的,非日志表在冲突或异常关机后会被自动删截。非日志表中的内容也不会被复制到备用服务器中。在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 UNLOGGED表无主备机制,在系统故障或异常断点等情况下,会有数据丢失风险,不可用来存储基础数据。 table_name 要创建的表名。 取值范围:字符串,要符合标识符的命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符的命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是合适的选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 取值范围:10~100 ORIENTATION 取值范围: COLUMN:表的数据将以列式存储。 ROW(缺省值):表的数据将以行式存储。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: 列存表的有效值为YES/NO和LOW/MIDDLE/HIGH,默认值为LOW。 暂不支持行存表压缩功能。 MAX_BATCHROW 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 取值范围:10000~60000 默认值:60000 PARTIAL_CLUSTER_ROWS 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对列存表有效。 取值范围:600000~2147483647 默认值:4,200,000 enable_delta 指定了在列存表是否开启delta表。该参数只对列存表有效。 不推荐使用列存带Delta表,否则会出现由于来不及merge而导致的磁盘膨胀以及性能劣化等问题。 默认值:off COLVERSION 指定列存存储格式的版本,支持不同存储格式版本之间的切换。 取值范围: 1.0:列存表的每列以一个单独的文件进行存储,文件名以relfilenode.C1.0、relfilenode.C2.0、relfilenode.C3.0等命名。 2.0:列存表的每列合并存储在一个文件中,文件名以relfilenode.C1.0命名 默认值:2.0 在建列存表时选择COLVERSION=2.0,相比于1.0存储格式,在以下场景中性能有明显提升: 创建列存宽表场景下,建表时间显著减少。 roach备份数据场景下,备份时间显著减少。 build、catch up耗时显著减少。 占用磁盘空间大小显著减少。 SKIP_FPI_HINT 顺序扫描过程中,若需要写FPW(full page writes)日志时,该参数控制是否跳过设置HintBits操作。 默认值:false 设置SKIP_FPI_HINT=true时,在对某表执行checkpoint操作后,若对该表进行顺序扫描,将不再产生Xlog。适用于查询次数较少的中间表,有效减少Xlog的大小,提升查询性能。 COMPRESS / NOCOMPRESS 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 缺省值:NOCOMPRESS,即不对元组数据进行压缩。 DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 REPLICATION:表的每一行存在所有数据节点( DN )中,即每个数据节点都有完整的表数据。 ROUNDROBIN:表的每一行被依次发送给各个DN,在这种分布策略下可以保证数据分布不会存在倾斜,但是因为数据分布节点是随机的,导致这类表在计算时会更大概率的触发此表的重分布。各列倾斜都比较严重的大表推荐使用此种分布策略。(ROUNDROBIN仅8.1.2及以上版本支持) HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 当指定DISTRIBUTE BY HASH (column_name)参数时,创建主键和唯一索引必须包含“ column_name”列。 当被参照表指定DISTRIBUTE BY HASH (column_name)参数时,参照表的外键必须包含“ column_name”列。 默认值:由GUC参数default_distribution_mode控制。 当default_distribution_mode=roundrobin时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,则选取ROUNDROBIN分布。 当default_distribution_mode=hash时,DISTRIBUTE BY的默认值按如下规则选取: 若建表时包含主键/唯一约束,则选取HASH分布,分布列为主键/唯一约束对应的列。 若建表时不包含主键/唯一约束,但存在数据类型支持作分布列的列,则选取HASH分布,分布列为第一个数据类型支持作分布列的列。 若建表时不包含主键/唯一约束,也不存在数据类型支持作分布列的列,选取ROUNDROBIN分布。 以下数据类型支持作为分布列: INTEGER TYPES:TINYINT,SMALLINT,INT,BIGINT,NUMERIC/DECIMAL CHARACTER TYPES:CHAR,BPCHAR,VARCHAR,VARCHAR2,NVARCHAR2,TEXT DATE/TIME TYPES:DATE,TIME,TIMETZ,TIMESTAMP,TIMESTAMPTZ,INTERVAL,SMALLDATETIME COMMENT [=] 'text' COMMENT子句可以在创建表时指定表注释。 AS query 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 [ WITH [ NO ] DATA ] 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名字及数据类型相关。不过用户可以通过明确地给出一个字段名字列表来覆盖SELECT输出字段的名字。 CREATE TABLE AS对源表进行一次查询,然后将数据写入新表中,而查询视图结果会根据源表的变化而有所改变。相比之下,每次做查询的时候,视图都重新计算定义它的SELECT语句。
  • 参数说明 PLAN 表示需要将计划信息存储于PLAN_TABLE中,存储成功将返回“EXPLAIN SUC CES S”。 STATEMENT_ID 用户可以对查询设置标签,输入的标签信息也将存储于PLAN_TABLE中。 用户在执行EXPLAIN PLAN时,如果没有进行SET STATEMENT_ID,则默认为空值。同时,用户可输入的STATEMENT_ID最大长度为30个字节,超过长度将会产生报错。
  • 注意事项 EXPLAIN PLAN不支持在DN上执行。 对于执行错误的SQL无法进行计划信息的收集。 PLAN_TABLE中的数据是session级生命周期并且session隔离和用户隔离,用户只能看到当前session、当前用户的数据。 PLAN_TABLE无法与GDS外表进行关联查询。 对于不能下推的查询,无法收集到具体的object信息,object只能收集到REMOTE_QUERY或CTE等信息。详见示例 2。
  • 示例 2 对于不能下推的查询,执行explain plan后plan_table中object仅收集到REMOTE_QUERY或CTE等信息。 优化器生成下发语句的计划,此时仅能收集到REMOTE_QUERY。 1 2 3 4 5 explain plan set statement_id = 'test remote query' for select current_user from customer; 查询PLAN_TABLE。 1 SELECT * FROM PLAN_TABLE;
  • substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f (1 row) 截取时间,获取小时数: 1 2 3 4 5 SELECT substring('2022-07-18 24:38:15',12,2)AS RESULT; result ----------- 24 (1 row)
  • btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d (1 row)
  • overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173 (1 row)
  • trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 1 2 3 4 5 SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d (1 row)
  • substring_index(string, delim, count) 描述:按照区分大小写匹配查找delimiter分隔符,返回string字符串中第count次出现delim分隔符之前的子串。若count为负数,则从末尾向前查找delim分隔符。若参数含有NULL值,返回NULL。该函数仅8.2.0及以上集群版本支持。 返回值类型:text 示例:按照区分大小写匹配查找delimiter分隔符".wWw.",返回string字符串"www.wWw.cloud.wWw.com"中第2次出现delimiter分隔符之前的子串"www.wWw.cloud"。 1 2 3 4 5 SELECT SUBSTRING_INDEX('www.wWw.cloud.wWw.com', '.wWw.', 2) AS RESULT; result --------------- www.wWw.cloud (1 row)
  • 参数说明 GRANT的权限分类如下所示。 SELECT 允许对指定的表、视图、序列执行SELECT语句。 INSERT 允许对指定的表执行INSERT语句。 UPDATE 允许对声明的表中任意字段执行UPDATE语句。SELECT… FOR UPDATE和SELECT… FOR SHARE除了需要SELECT权限外,还需要UPDATE权限。 DELETE 允许执行DELETE语句删除指定表中的数据。 TRUNCATE 允许执行TRUNCATE语句删除指定表中的所有记录。 REFERENCES 创建一个外键约束,必须拥有参考表和被参考表的REFERENCES权限。 TRIGGER 创建一个触发器,必须拥有表或视图的TRIGGER权限。 ANALYZE | ANALYSE 对表执行ANALYZE | ANALYSE操作来收集表的统计信息,必须拥有表的ANALYZE | ANALYSE权限。 CREATE 对于数据库,允许在数据库里创建新的模式。 对于模式,允许在模式中创建新的对象。如果要重命名一个对象,用户除了必须是该对象的所有者外,还必须拥有该对象所在模式的CREATE权限。 对于子集群,允许在子集群中创建表对象。 CONNECT 允许用户连接到指定的数据库。 TEMPORARY | TEMP 允许在使用指定数据库时创建临时表。 EXECUTE 允许使用指定的函数,以及利用这些函数实现的操作符。 USAGE 对于过程语言,允许用户在创建函数的时候指定过程语言。 对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名字。 对于序列,USAGE允许使用nextval函数。 对于子集群, 对包含在指定模式中的对象有访问权限时,USAGE允许访问指定子集群下的表对象。 COMPUTE 针对计算子集群,允许用户在具有compute权限的计算子集群上进行弹性计算。 ALTER 允许修改表或模式。 DROP 允许删除表或模式。 VACUUM 允许对表执行VACUUM。 ALL PRIVILEGES 一次赋予指定用户/角色所有可赋予的权限。只有系统管理员有权执行GRANT ALL PRIVILEGES。 WITH GRANT OPTION 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。 NODE GROUP不支持WITH GRANT OPTION功能。 使用with grant option时需确保security_enable_options参数值中设置了grant_with_grant_option。 WITH ADMIN OPTION 指定权限是否允许转授。如果声明了WITH ADMIN OPTION,角色的成员又可以将角色的成员身份授予其他人。 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 包含本页的大对象的标识符。 取值范围:字符串,要符合标识符命名规范。
  • 示例 将系统权限授权给用户或者角色。 将sysadmin所有可用权限授权给joe用户: 1 GRANT ALL PRIVILEGES TO joe; 授权成功后,用户joe会拥有sysadmin的所有权限。 将对象权限授权给用户或者角色。 将表tpcds.reason的SELECT权限授权给用户joe: 1 GRANT SELECT ON TABLE tpcds.reason TO joe; 将表tpcds.reason的所有权限授权给用户kim: 1 GRANT ALL PRIVILEGES ON tpcds.reason TO kim; 授权成功后,kim用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。 将模式tpcds的使用权限授权给用户joe: 1 GRANT USAGE ON SCHEMA tpcds TO joe; 授权成功后,joe用户就拥有了模式schema的USAGE权限,允许访问包含在指定模式schema中的对象。 将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe: 1 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的查询权限会立即生效。 1 GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe ; 将函数func_add_sql的EXECUTE权限授权给用户joe。 1 2 3 4 5 6 CREATE FUNCTION func_add_sql(f1 integer,f2 integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; GRANT EXECUTE ON FUNCTION func_add_sql(integer, integer) TO joe; 将序列serial的UPDATE权限授权给joe用户。 1 GRANT UPDATE ON SEQUENCE serial TO joe; 将数据库gaussdb的连接权限授权给用户joe,并给予其在gaussdb中创建schema的权限: 1 GRANT create,connect on database gaussdb TO joe ; 将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人: 1 GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager; 将用户或者角色的权限授权给其他用户或角色。 将用户joe的权限授权给用户manager,并允许该角色将权限授权给其他人: 1 GRANT joe TO manager WITH ADMIN OPTION; 将用户manager的权限授权给senior_manager用户: 1 GRANT manager TO senior_manager;
  • 语法格式 将表或视图的访问权限赋予指定的用户或角色。不允许对表分区进行GRANT操作,对表分区进行GRANT操作会引起告警。 1 2 3 4 5 6 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | 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 } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将数据库的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | 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 | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将函数的访问权限赋予给指定的用户或角色。 1 2 3 4 5 GRANT { EXECUTE | 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 { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持过程语言。 将大对象的访问权限赋予指定的用户或角色。 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 5 GRANT { { SELECT | UPDATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将子集群的访问权限赋予指定的用户或角色。普通用户不能执行针对Node Group的GRANT/REVOKE操作。 1 2 3 4 GRANT { CREATE | USAGE | COMPUTE | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将模式的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { CREATE | USAGE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名字,并不能实际进行对象访问。 将类型的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持赋予类型的访问权限。 将角色的权限赋予其他用户或角色的语法。 1 2 3 GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]; 将sysadmin权限赋予指定的角色。 1 2 GRANT ALL { PRIVILEGES | PRIVILEGE } TO role_name;
  • 功能描述 对角色和用户进行授权操作。 使用GRANT命令进行用户授权包括以下三种场景: 将系统权限授权给角色或用户 系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。 系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。 将数据库对象授权给角色或用户 将数据库对象(表和视图、指定字段、数据库、函数、模式等)的相关权限授予特定角色或用户。 GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。 关键字PUBLIC表示该权限要赋予所有角色,包括以后创建的用户。PUBLIC可以看做是一个隐含定义好的组,它总是包括所有角色。任何角色或用户都将拥有通过GRANT直接赋予的权限和所属的权限,再加上PUBLIC的权限。 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC,这是 GaussDB (DWS)特有的属性。 GaussDB(DWS)会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。 将角色或用户的权限授权给其他角色或用户 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。 当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。 数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。
  • 添加约束 右键单击表下的“约束”,选择“添加约束”。 弹出“添加新约束”对话框,提示在新约束中输入信息。 约束类型有CHECK、PRIMARY KEY、UNIQUE三个选项,详细说明请参考定义表约束。 输入“约束名”和“选定的列”,单击“添加”。完成操作后,该约束添加到表中。 Data Studio在状态栏显示操作状态信息。 如果“约束名”字段中已经提供了约束名称,则状态栏将显示该约束名称,否则将不显示该约束名。
  • 参数说明 name 已有文本搜索配置的名称(可以有模式修饰)。 token_type 与配置的语法解析器关联的字串类型的名称。详细信息参见解析器。 dictionary_name 文本搜索字典名称。 如果有多个字典,则它们会按指定的顺序搜索。 old_dictionary 映身中拟被替换的文本搜索字典名称。 new_dictionary 替换old_dictionary的文本搜索字典的名称。 new_owner 文本搜索配置的新所有者。 new_name 文本搜索配置的新名称。 new_schema 文本搜索配置的新模式名。 configuration_option 文本搜索配置项。详细信息参见CREATE TEXT SEARCH CONFIGURATION。 value 文本搜索配置项的值。
  • 示例 给文本搜索类型ngram1添加类型映射: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 ADD MAPPING FOR multisymbol WITH simple; 修改文本搜索配置的所有者: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 OWNER TO joe; 修改文本搜索配置的schema: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 SET SCHEMA joe; 重命名文本搜索配置: 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram1 RENAME TO ngram_1; 删除类型映射: 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram_1 DROP MAPPING IF EXISTS FOR multisymbol; 增加文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR word WITH simple,english_stem; 增加文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR email WITH english_stem, french_stem; 修改文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ALTER MAPPING REPLACE french_stem with german_stem; 查询文本搜索配置相关信息: 1 2 3 4 5 6 7 8 SELECT b.cfgname,a.maptokentype,a.mapseqno,a.mapdict,c.dictname FROM pg_ts_config_map a,pg_ts_config b, pg_ts_dict c WHERE a.mapcfg=b.oid AND a.mapdict=c.oid AND b.cfgname='english_1' ORDER BY 1,2,3,4,5; cfgname | maptokentype | mapseqno | mapdict | dictname -----------+--------------+----------+---------+-------------- english_1 | 2 | 1 | 3765 | simple english_1 | 2 | 2 | 12960 | english_stem english_1 | 4 | 1 | 12960 | english_stem english_1 | 4 | 2 | 12966 | german_stem (4 rows)
  • 语法格式 增加文本搜索配置字串类型映射语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ADD MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 修改文本搜索配置字典语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] REPLACE old_dictionary WITH new_dictionary; 修改文本搜索配置字串类型语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 更改文本搜索配置字典语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING REPLACE old_dictionary WITH new_dictionary; 删除文本搜索配置字串类型映射语法 1 2 ALTER TEXT SEARCH CONFIGURATION name DROP MAPPING [ IF EXISTS ] FOR token_type [, ... ]; 重命名文本搜索配置所有者语法 1 ALTER TEXT SEARCH CONFIGURATION name OWNER TO new_owner; 重命名文本搜索配置名称语法 1 ALTER TEXT SEARCH CONFIGURATION name RENAME TO new_name; 重命名文本搜索配置命名空间语法 1 ALTER TEXT SEARCH CONFIGURATION name SET SCHEMA new_schema; 修改文本搜索配置属性语法 1 ALTER TEXT SEARCH CONFIGURATION name SET ( { configuration_option = value } [, ...] ); 重置文本搜索配置属性语法 1 ALTER TEXT SEARCH CONFIGURATION name RESET ( {configuration_option} [, ...] ); ADD MAPPING FOR选项为文本搜索配置增加字串类型映射;如果ADD MAPPING FOR后面任何一个字串类型的映射已经存在于此文本搜索配置中,那么系统将会报错。 ALTER MAPPING FOR选项会首先清除已有的字串类型映射,然后添加指定的字串类型映射。 ALTER MAPPING REPLACE ... WITH ... 与ALTER MAPPING FOR ... REPLACE ... WITH ...选项会直接使用new_dictionary替换old_dictionary。需要注意的是,只有pg_ts_config_map系统表中存在maptokentype与old_dictionary对应关系的元组时,才能更新成功,否则不会成功,也不会有任何提示信息返回。 DROP MAPPING FOR选项会删除当前文本搜索配置中指定的字串类型映射。 如果没有指定IF EXISTS选项,当DROP MAPPING FOR选项指定的字串类型映射在文本搜索配置中不存在时,数据库会报错。
  • VOLATILE 输入文件中包含表的专用关键词VOLATILE,但GaussDB(DWS)不支持该关键词。因此,DSC在迁移过程中用关键词LOCAL TEMPORARY替换该关键词。根据配置输入,Volatile表在迁移中标记为本地临时表或无日志表。 输入:CREATE VOLATILE TABLE 1 CREATE VOLATILE TABLE T1 (c1 int ,c2 int); 输出 1 2 3 4 5 6 7 CREATE LOCAL TEMPORARY TABLE T1 ( c1 INTEGER ,c2 INTEGER ) ; 输入:CREATE VOLATILE TABLE AS WITH DATA(session_mode=Teradata) 如果源表具有PRIMARY KEY(主键)或UNIQUE CONSTRAINT(唯一约束),则该表不包含任何重复记录。在这种情况下,不需要添加MINUS操作符删除重复的记录。 1 2 3 4 5 6 7 8 9 10 CREATE VOLATILE TABLE tabV1 ( C1 INTEGER DEFAULT 99 ,C2 INTEGER ,C3 INTEGER ,C4 NUMERIC (20,0) DEFAULT NULL (BIGINT) ,CONSTRAINT XX1 PRIMARY KEY ( C1, C2 ) ) PRIMARY INDEX (C1, C3 ); CREATE TABLE tabV2 AS tabV1 WITH DATA PRIMARY INDEX (C1) ON COMMIT PRESERVE ROWS; 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE LOCAL TEMPORARY TABLE tabV1 ( C1 INTEGER DEFAULT 99 ,C2 INTEGER ,C3 INTEGER ,C4 NUMERIC (20,0) DEFAULT CAST( NULL AS BIGINT ) ,CONSTRAINT XX1 PRIMARY KEY ( C1, C2 ) ) DISTRIBUTE BY HASH (C1); BEGIN CREATE TABLE tabV2 ( LIKE tabV1 INCLUDING ALL EXCLUDING PARTITION EXCLUDING RELOPTIONS EXCLUDING DISTRIBUTION ) DISTRIBUTE BY HASH (C1); INSERT INTO tabV2 SELECT * FROM tabV1; END ; / 父主题: 表迁移
  • 参数说明 rule_name 异常规则集名称。 取值范围:字符串,要符合标识符的命名规范。 blocktime 作业排队阻塞的最大时间,单位:秒。 取值范围:数值型,-1,1~INT64_MAX。 elapsedtime 作业执行的最大时间,单位:秒。 取值范围:数值型,-1,1~INT64_MAX。 allcputime 作业运行中使用的最大CPU时间,单位:秒。 取值范围:数值型,-1,1~INT64_MAX。 cpuskewpercent 作业执行时的CPU使用倾斜率,单位:百分比。 取值范围:数值型,-1,1~100。 cpuavgpercent 作业执行时的平均CPU使用率,单位:百分比。 取值范围:数值型,-1,1~100。 spillsize 作业执行的最大下盘大小,单位:MB。 取值范围:数值型,-1,1~INT64_MAX。 broadcastsize 作业执行的最大广播大小,单位:MB。 取值范围:数值型,-1,1~INT64_MAX。 memsize 作业执行使用的最大内存大小,单位:MB。 取值范围:数值型,-1,1~INT64_MAX。 bandwidth 作业执行可使用的最大网络带宽,单位:MB。 取值范围:数值型,-1,1~INT64_MAX。
  • 示例 修改异常规则except_rule1的blocktime规则阈值为3000秒,下盘空间为4000MB。 1 ALTER EXCEPT RULE except_rule1 WITH (blocktime=3000, spillsize=4000); 修改异常规则except_rule2的下盘空间规则spillsize为5000MB。 1 ALTER EXCEPT RULE except_rule2 WITH (spillsize=5000); 修改资源池resource_pool_a1绑定的异常规则集为except_rule3。 1 ALTER resource pool resource_pool_a1 WITH (except_rule='except_rule3'); 解除资源池resource_pool_a1绑定的异常规则集。 1 ALTER resource pool resource_pool_a1 WITH (except_rule='None');
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 ALTER EXCEPT RULE except_rule_name WITH ( | BLOCKTIME = VALUE, | CPUTIME = VALUE, | ELAPSEDTIME = VALUE, | CPUSKEWPERCENT = VALUE, | SPILLSIZE = VALUE, | BROADCASTSIZE = VALUE, | MEMSIZE = VALUE, | CPUAVGPERCENT = VALUE, | BANDW IDT H = VALUE, | ACTION = ['abort' | 'penalty'] );
  • 内置函数 HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下不建议用户使用。 表1 内置函数 函数名称 功能描述 hll_in 以string格式接收hll数据。 hll_out 以string格式发送hll数据。 hll_recv 以bytea格式接收hll数据。 hll_send 以bytea格式发送hll数据。 hll_trans_in 以string格式接收hll_trans_type数据。 hll_trans_out 以string格式发送hll_trans_type数据。 hll_trans_recv 以bytea形式接收hll_trans_type数据。 hll_trans_send 以bytea形式发送hll_trans_type数据。 hll_typmod_in 接收typmod类型数据。 hll_typmod_out 发送typmod类型数据。 hll_hashval_in 接收hll_hashval类型数据。 hll_hashval_out 发送hll_hashval类型数据。 hll_add_trans0 类似于hll_add所提供的功能, 通常在分布式聚合运算的第一阶段DN上使用。 hll_union_trans 类似hll_union所提供的功能,在分布式聚合运算的第一阶段DN上使用。 hll_union_collect 类似于hll_union所提供的功能,在分布式聚合运算第二阶段CN上使用,汇总各个DN上的结果。 hll_pack 在分布式聚合运算第三阶段CN上使用,把自定义hll_trans_type类型最后转换成hll类型。 hll 用于hll类型转换成hll类型,根据输入参数会设定指定参数。 hll_hashval 用于bigint类型转换成hll_hashval类型。 hll_hashval_int4 用于int4类型转换成hll_hashval类型。 父主题: HLL函数和操作符
  • 类型对照 表1 二进制类型对照表 MySQL二进制类型 MySQL INPUT GaussDB(DWS) OUTPUT BIT[(M)] BIT[(M)] BIT[(M)] BINARY[(M)] BINARY[(M)] BYTEA CHAR BYTE[(M)] BINARY[(M)] BYTEA VARBINARY[(M)] VARBINARY[(M)] BYTEA 输入示例BIT 1 2 3 4 5 CREATE TABLE IF NOT EXISTS `runoob_dataType_test`( `dataType_1` INT, `dataType_2` BIT(1), `dataType_3` BIT(64) ); 输出示例 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "datatype_1" INTEGER, "datatype_2" BIT(1), "datatype_3" BIT(64) ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype_1"); 输入示例[VAR]BINARY 1 2 3 4 5 6 7 8 CREATE TABLE IF NOT EXISTS `runoob_dataType_test`( `dataType_1` INT, `dataType_2` BINARY, `dataType_3` BINARY(0), `dataType_4` BINARY(255), `dataType_5` VARBINARY(0), `dataType_6` VARBINARY(6553) ); 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "datatype_1" INTEGER, "datatype_2" BYTEA, "datatype_3" BYTEA, "datatype_4" BYTEA, "datatype_5" BYTEA, "datatype_6" BYTEA ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype_1");
  • (可选)准备E CS 作为gsql客户端主机 购买弹性云服务器的操作步骤,请参见《弹性云服务器快速入门》中的购买并登录Linux弹性云服务器章节。 创建的弹性云服务器需要满足如下要求: 弹性云服务器需要与GaussDB(DWS) 集群具有相同的区域、可用区。 如果使用GaussDB(DWS) 提供的gsql命令行客户端连接GaussDB(DWS) 集群,弹性云服务器的镜像必须满足如下要求: 镜像的操作系统必须是gsql客户端所支持的下列Linux操作系统: “Redhat x86_64”客户端工具支持在以下系统中使用: RHEL 6.4~7.6。 CentOS 6.4~7.4。 EulerOS 2.3。 “SUSE x86_64”客户端工具支持在以下系统中使用: SLES 11.1~11.4。 SLES 12.0~12.3。 “Euler Kunpeng_64”客户端工具支持在以下系统中使用: EulerOS 2.8。 “Stream Euler X86_64”客户端工具支持在以下系统中使用: EulerOS 2.2。 “Stream Euler Kunpeng_64”客户端工具支持在以下系统中使用: EulerOS 2.8。 如果客户端通过内网地址访问集群,请确保创建的弹性云服务器与GaussDB(DWS) 集群在同一虚拟私有云里。 虚拟私有云相关操作请参见《虚拟私有云用户指南》中虚拟私有云和子网章节。 如果客户端通过公网地址访问集群,请确保创建的弹性云服务器和GaussDB(DWS) 集群都要有弹性IP。 购买弹性云服务器时,参数“弹性公网IP”需选择“现在购买”或“使用已有”。 弹性云服务器对应的安全组规则需要确保能与GaussDB(DWS) 集群提供服务的端口网络互通。 安全组相关操作请参见《虚拟私有云用户指南》中安全组章节。 请确认弹性云服务器的安全组中存在符合如下要求的规则,如果不存在,请在弹性云服务器的安全组中添加相应的规则: 方向:出方向 协议:必须包含TCP,例如TCP、全部。 端口:需要包含GaussDB(DWS) 集群提供服务的数据库端口,例如,设置为“1-65535”或者具体的GaussDB(DWS) 数据库端口。 目的地址:设置的IP地址需要包含所要连接的GaussDB(DWS) 集群的连接地址。其中0.0.0.0/0表示任意地址。 图1 出方向的规则 GaussDB(DWS) 集群的安全组规则需要确保GaussDB(DWS) 能接收来自客户端的网络访问。 请确认GaussDB(DWS) 集群的安全组中存在符合如下要求的规则,如果不存在,请在GaussDB(DWS) 集群的安全组中添加相应的规则。 方向:入方向 协议:必须包含TCP,例如TCP、全部。 端口:设置为GaussDB(DWS) 集群提供服务的数据库端口,例如“8000”。 源地址:设置的IP地址需要包含GaussDB(DWS) 客户端主机的IP地址,例如“192.168.0.10/32”。 图2 入方向的规则
共100000条