华为云用户手册

  • NTH_VALUE(value any, nth integer) 描述:NTH_VALUE函数返回该组内的第nth行作为结果。若该行不存在,则默认返回NULL。 返回值类型:与参数数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id,classid,score,NTH_VALUE(id,3) OVER(ORDER BY score DESC) FROM score; id | classid | score | nth_value ----+---------+-------+----------- 1 | 1 | 95 | 2 | 2 | 95 | 5 | 2 | 88 | 5 3 | 2 | 85 | 5 4 | 1 | 70 | 5 6 | 1 | 70 | 5 (6 rows)
  • NTILE(num_buckets integer) 描述:NTILE函数根据num_buckets integer将有序的数据集合平均分配到num_buckets所指定数量的桶中,并将桶号分配给每一行。分配时应尽量做到平均分配。 返回值类型:INTEGER 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id,classid,score,NTILE(3) OVER(ORDER BY score DESC) FROM score; id | classid | score | ntile ----+---------+-------+------- 1 | 1 | 95 | 1 2 | 2 | 95 | 1 5 | 2 | 88 | 2 3 | 2 | 85 | 2 4 | 1 | 70 | 3 6 | 1 | 70 | 3 (6 rows)
  • DENSE_RANK() 描述:DENSE_RANK函数为各组内值生成连续排序序号,其中相同的值具有相同序号,相同值只占用一个编号。 返回值类型:BIGINT 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id, classid, score,DENSE_RANK() OVER(ORDER BY score DESC) FROM score; id | classid | score | dense_rank ----+---------+-------+------------ 1 | 1 | 95 | 1 2 | 2 | 95 | 1 5 | 2 | 88 | 2 3 | 2 | 85 | 3 6 | 1 | 70 | 4 4 | 1 | 70 | 4 (6 rows)
  • PERCENT_RANK() 描述:PERCENT_RANK函数为各组内对应值生成相对序号,即根据公式 (rank - 1) / (total rows - 1)计算所得的值。其中rank为该值依据RANK函数所生成的对应序号,totalrows为该分组内的总元素个数。 返回值类型:DOUBLE PRECISION 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id, classid, score,PERCENT_RANK() OVER(ORDER BY score DESC) FROM score; id | classid | score | percent_rank ----+---------+-------+-------------- 1 | 1 | 95 | 0 2 | 2 | 95 | 0 3 | 2 | 85 | .6 4 | 1 | 70 | .8 5 | 2 | 88 | .4 6 | 1 | 70 | .8 (6 rows)
  • CUME_DIST() 描述:CUME_DIST函数为各组内对应值生成累积分布序号。即根据公式(小于等于当前值的数据行数)/(该分组总行数totalrows)计算所得的相对序号。 返回值类型:DOUBLE PRECISION 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id,classid,score,CUME_DIST() OVER(ORDER BY score DESC) FROM score; id | classid | score | cume_dist ----+---------+-------+------------------ 1 | 1 | 95 | .333333333333333 2 | 2 | 95 | .333333333333333 5 | 2 | 88 | .5 3 | 2 | 85 | .666666666666667 4 | 1 | 70 | 1 6 | 1 | 70 | 1 (6 rows)
  • LAG(value any [, offset integer [, default any ]]) 描述:LAG函数为各组内对应值生成滞后值。即当前值对应的行数往前偏移offset位后所得行的value值作为序号。若经过偏移后行数不存在,则对应结果取为default值。若无指定,在默认情况下,offset取为1,default值取为NULL。 返回值类型:与参数数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT id,classid,score,LAG(id,3) OVER(ORDER BY score DESC) FROM score; id | classid | score | lag ----+---------+-------+----- 1 | 1 | 95 | 2 | 2 | 95 | 5 | 2 | 88 | 3 | 2 | 85 | 1 4 | 1 | 70 | 2 6 | 1 | 70 | 5 (6 rows)
  • 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)
  • 语法格式 窗口函数需要特殊的关键字OVER语句来指定窗口触发窗口函数。OVER语句用于对数据进行分组,并对组内元素进行排序。窗口函数用于给组内的值生成序号: 1 2 3 4 function_name ([expression [, expression ... ]]) OVER ( window_definition ) function_name ([expression [, expression ... ]]) OVER window_name function_name ( * ) OVER ( window_definition ) function_name ( * ) OVER window_name 其中window_definition子句option为: 1 2 3 4 [ existing_window_name ] [ PARTITION BY expression [, ...] ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ frame_clause ] PARTITION BY选项指定了将具有相同PARTITION BY表达式值的行分为一组。 ORDER BY选项用于控制窗口函数处理行的顺序。ORDER BY后面必须跟字段名,若ORDER BY后面跟数字,该数字会被按照常量处理,对目标列没有起到排序的作用。 frame_clause子句option为: 1 2 [ RANGE | ROWS ] frame_start [ RANGE | ROWS ] BETWEEN frame_start AND frame_end 当需要指定一个窗口对分组内所有行结果进行计算时,我们需要指定窗口区间开始的行和结束的行。窗口区间支持RANGE、ROWS两种模式,ROWS以物理单位(行)指定窗口,RANGE将窗口指定为逻辑偏移量。 RANGE、ROWS中可以使用BETWEEN frame_start AND frame_end指定边界可取值。如果仅指定frame_start,则frame_end默认为CURRENT ROW。 frame_start和frame_end取值为: CURRENT ROW,当前行。 N PRECEDING,当前行向前第n行。 UNBOUNDED PRECEDING,当前PARTITION的第1行。 N FOLLOWING,当前行向后第n行。 UNBOUNDED FOLLOWING,当前PARTITION的最后1行。 需要注意,frame_start不能为UNBOUNDED FOLLOWING,frame_end不能为UNBOUNDED PRECEDING,并且frame_end选项不能比上面取值中出现的frame_start选项早。例如RANGE BETWEEN CURRENT ROW AND N PRECEDING是不被允许的。 8.3.0.100及以上版本集群,LAST_VALUE函数支持IGNORE NULLS语法,该语法返回非NULL窗口中的最后一个值,如果所有值都为NULL,则返回NULL,具体格式为: 1 LAST_VALUE (expression [IGNORE NULLS]) OVER (window_definition)
  • RANK() 描述:RANK函数为各组内值生成跳跃排序序号,其中相同的值具有相同序号,但相同值占用多个编号。 返回值类型:BIGINT 示例: 给定表score(id, classid, score),每行表示学生id,所在班级id以及考试成绩。 使用RANK函数对学生成绩进行排序: 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE score(id int,classid int,score int); INSERT INTO score VALUES(1,1,95),(2,2,95),(3,2,85),(4,1,70),(5,2,88),(6,1,70); SELECT id, classid, score,RANK() OVER(ORDER BY score DESC) FROM score; id | classid | score | rank ----+---------+-------+------ 1 | 1 | 95 | 1 2 | 2 | 95 | 1 6 | 1 | 70 | 5 4 | 1 | 70 | 5 5 | 2 | 88 | 3 3 | 2 | 85 | 4 (6 rows)
  • 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)
  • 输入格式 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;
  • 注意事项 只有数据库所有者有权限执行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。
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名字及数据类型相关。不过用户可以通过明确地给出一个字段名字列表来覆盖SELECT输出字段的名字。 CREATE TABLE AS对源表进行一次查询,然后将数据写入新表中,而查询视图结果会根据源表的变化而有所改变。相比之下,每次做查询的时候,视图都重新计算定义它的SELECT语句。
  • 语法格式 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”参数时,则不要数据。
  • 示例 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;
  • 参数说明 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。
  • 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)
  • 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)
  • 参数说明 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在状态栏显示操作状态信息。 如果“约束名”字段中已经提供了约束名称,则状态栏将显示该约束名称,否则将不显示该约束名。
  • 示例 给文本搜索类型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)
  • 参数说明 name 已有文本搜索配置的名称(可以有模式修饰)。 token_type 与配置的语法解析器关联的字串类型的名称。详细信息参见解析器。 dictionary_name 文本搜索字典名称。 如果有多个字典,则它们会按指定的顺序搜索。 old_dictionary 映身中拟被替换的文本搜索字典名称。 new_dictionary 替换old_dictionary的文本搜索字典的名称。 new_owner 文本搜索配置的新所有者。 new_name 文本搜索配置的新名称。 new_schema 文本搜索配置的新模式名。 configuration_option 文本搜索配置项。详细信息参见CREATE TEXT SEARCH CONFIGURATION。 value 文本搜索配置项的值。
共100000条