华为云用户手册

  • 参数说明 name 将要修改的序列名称。 IF EXISTS 当序列不存在时使用该选项不会出现错误消息,仅有一个通知。 MAXVALUE maxvalue | NO MAXVALUE 序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。 CACHE cachevalue 该参数仅8.2.1.100及以上集群版本支持。 指定要预先分配多少序列号并存储在内存中以便更快地访问。cachevalue最小值为 1(一次只能生成一个值,即 NOCACHE)。如果未指定,则保留旧缓存值。 OWNED BY 将序列和一个表的指定字段进行关联。这样,在删除指定字段或其所在表的时候会自动删除已关联的序列。 如果序列已经和表有关联后,使用OWNED BY参数后新的关联关系会覆盖旧的关联。 关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。 使用OWNED BY NONE将删除任何已经存在的关联。 new_owner 序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且所有者角色必须有序列所在模式上的CREATE权限。
  • rb_or(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap的并集。 返回值类型:roaringbitmap 示例: 1 2 3 4 5 SELECT rb_to_array(rb_or(rb_build('{1,2,3}'), rb_build('{2,3,4}'))); rb_to_array ------------- {1,2,3,4} (1 row)
  • rb_and_cardinality(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap的交集的基数。 返回值类型:int 示例: 1 2 3 4 5 SELECT rb_and_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}')); rb_and_cardinality -------------------- 2 (1 row)
  • rb_or_cardinality(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap的并集的基数。 返回值类型:int 示例: 1 2 3 4 5 SELECT rb_or_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}')); rb_or_cardinality ------------------- 4 (1 row)
  • rb_contain_rb(roaringbitmap,roaringbitmap) 描述:判断第一个roaringbitmap是否包含第二个roaringbitmap。 返回值类型:bool 示例: 1 2 3 4 5 SELECT rb_contain_rb(rb_build('{1,3}'), rb_build('{2,3}')); rb_contain_rb --------------- f (1 row)
  • rb_containedby_rb(roaringbitmap,roaringbitmap) 描述:判断跟定的第二个roaringbitmap是否包含第一个roaringbitmap。 返回值类型:bool 示例: 1 2 3 4 5 SELECT rb_containedby_rb(rb_build('{1,3}'), rb_build('{2,3}')); rb_containedby_rb --------------- f (1 row)
  • rb_clear(roaringbitmap,int,int) 描述:从roaringbitmap中清除指定范围内的元素。 返回值类型:roaringbitmap 示例: 1 SELECT rb_to_array(rb_clear(rb_build('{1,2,3}'),1,2)); rb_to_array ------------- {2,3} (1 row)
  • rb_xor(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap的异或。 返回值类型:roaringbitmap 示例: 1 2 3 4 5 SELECT rb_to_array(rb_xor(rb_build('{1,2,3}'), rb_build('{2,3,4}'))); rb_to_array ------------- {1,4} (1 row)
  • rb_andnot(roaringbitmap, roaringbitmap) 描述:在第一个roaringbitmap集合中,但是不在第二个roaringbitmap中的集合。 返回值类型:roaringbitmap 示例: 1 2 3 4 5 SELECT rb_to_array(rb_andnot(rb_build('{1,2,3}'), rb_build('{2,3,4}'))); rb_to_array ------------- {1} (1 row)
  • rb_xor_cardinality(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap异或以后的基数。 返回值类型:int 示例: 1 2 3 4 5 SELECT rb_xor_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}')); rb_xor_cardinality -------------------- 2 (1 row)
  • rb_andnot_cardinality(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap按照andnot计算结果以后的基数。 返回值类型:int 示例: 1 2 3 4 5 SELECT rb_andnot_cardinality(rb_build('{1,2,3}'), rb_build('{2,3,4}')); rb_andnot_cardinality ----------------------- 1 (1 row)
  • rb_and(roaringbitmap, roaringbitmap) 描述:计算两个roaringbitmap的交集。 返回值类型:roaringbitmap 示例: 1 2 3 4 5 SELECT rb_to_array(rb_and(rb_build('{1,2,3}'), rb_build('{2,3,4}'))); rb_to_array ------------- {2,3} (1 row)
  • rb_to_array(roaringbitmap) 描述:rb_build的逆向操作,把roaringBitmap转成int数组。 返回值类型: array 示例: 1 2 3 4 5 6 7 8 9 10 SELECT rb_to_array(c) FROM r_row; rb_to_array ------------- {1,2,3} (1 row) SELECT rb_to_array('\x3a300000010000000000020010000000010002000300'); rb_to_array ------------- {1,2,3} (1 row)
  • rb_build(array) 描述:将int数组转成roaringbitmap类型。 返回值类型:roaringbitmap 示例: 1 2 3 4 5 SELECT rb_build('{1,2,3}'); rb_build ------------------------------------------------ \x3a300000010000000000020010000000010002000300 (1 row) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE r_row (a int, b text, c roaringbitmap); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE INSERT INTO r_row values (1, 'a', rb_build('{1,2,3}')); INSERT 0 1 SELECT * FROM r_row; a | b | c ---+---+------------------------------------------------ 1 | a | \x3a300000010000000000020010000000010002000300 (1 row) INSERT INTO r_row values (2, 'b', rb_build('{}')); INSERT 0 1 SELECT * FROM r_row; a | b | c ---+---+------------------------------------------------ 2 | b | \x3a30000000000000 1 | a | \x3a300000010000000000020010000000010002000300 (2 rows)
  • 修改数组 更新数组 更新整个数组数据: UPDATE books SET price_by_quarter = '{30,30,30,30}' WHERE title = 'Robinson Crusoe'; 使用ARRAY表达式语法更新整个数组数据: UPDATE books SET price_by_quarter = ARRAY[30,30,30,30] WHERE title = 'Robinson Crusoe'; 更新数组中的一个元素: UPDATE books SET price_by_quarter[4] = 35 WHERE title = 'Robinson Crusoe'; 更新数组中的一个切片元素: UPDATE books SET price_by_quarter[1:2] = '{27,27}' WHERE title = 'Robinson Crusoe'; 一个已存储的数组值可以被通过对其还不存在的元素赋值来扩大大小。任何位于已存在的元素和新元素之间的位置都将被空值填充。例如,如果数组myarray目前有4个元素,使用UPDATE对myarray[6]赋值后它将有6个元素,其中myarray[5]为空值。目前,采用这种方式扩大数组只允许使用在一维数组上。 构建新数组 新的数组值也可以通过串接操作符“||”构建。串接操作符允许把一个单独的元素加入到一个一维数组的开头或末尾。也可接受两个N维数组,或者一个N维数组和一个N+1维数组。 SELECT ARRAY[1,2] || ARRAY[3,4]; ?column? ----------- {1,2,3,4} (1 row) SELECT ARRAY[5,6] || ARRAY[[1,2],[3,4]]; ?column? --------------------- {{5,6},{1,2},{3,4}} (1 row) 使用函数array_prepend、array_append或array_cat构建数组。 SELECT array_prepend(1, ARRAY[2,3]); array_prepend --------------- {1,2,3} (1 row) SELECT array_append(ARRAY[1,2], 3); array_append -------------- {1,2,3} (1 row) SELECT array_cat(ARRAY[1,2], ARRAY[3,4]); array_cat ----------- {1,2,3,4} (1 row) SELECT array_cat(ARRAY[[1,2],[3,4]], ARRAY[5,6]); array_cat --------------------- {{1,2},{3,4},{5,6}} (1 row) SELECT array_cat(ARRAY[5,6], ARRAY[[1,2],[3,4]]); array_cat --------------------- {{5,6},{1,2},{3,4}} (1 row)
  • 数组值输入 输入数组值时要把一个数组值写成一个文字常数,将元素值用花括号包围并用逗号分隔。一个数组常量的一般格式如下: 1 '{ val1 delim val2 delim ... }' 其中,delim是类型的定界符,每个val可以是数组元素类型的一个常量或子数组。 一个数组常量的例子如下: 1 '{{1,2,3},{4,5,6},{7,8,9}}' 该常量是一个二维的,3乘3数组,它由3个整数子数组构成。 向表books插入数据并查询表books: 1 2 3 4 5 6 7 8 9 10 11 12 INSERT INTO books VALUES (1, 'One Hundred years of Solitude','{25,25,25,25}','{{"fiction"}, {"adventure"}}'), (2, 'Robinson Crusoe', '{30,32,32,32}', '{{"adventure"}, {"fiction"}}'), (3, 'Gone with the Wind', '{27,27,29,28}', '{{"romance"}, {"fantasy"}}'); SELECT * FROM books; id | title | price_by_quarter | tags ----+-------------------------------+------------------+------------------------- 1 | One Hundred years of Solitude | {25,25,25,25} | {{fiction},{adventure}} 2 | Robinson Crusoe | {30,32,32,32} | {{adventure},{fiction}} 3 | Gone with the Wind | {27,27,29,28} | {{romance},{fantasy}} (3 rows) 插入多维数组数据时,多维数组的每一维都必须有相匹配的长度。 使用ARRAY关键字插入数据: INSERT INTO books VALUES (1, 'One Hundred years of Solitude',ARRAY[25,25,25,25],ARRAY['fiction', 'adventure']), (2, 'Robinson Crusoe', ARRAY[30,32,32,32], ARRAY['adventure', 'fiction']), (3, 'Gone with the Wind', ARRAY[27,27,29,28], ARRAY['romance', 'fantasy']);
  • 语法格式 1 ARRAY [ param ] 或 1 '{ param }' 其中参数param说明如下: param :数组包含的值,允许出现零个或多个,多个值之间用逗号分隔,没有值可填写为NULL。 以'{ param }' 这种格式作为数组常量时,其中的字符串类型的元素不能再以单引号开始和结束,需要使用双引号。两个连续单引号转换为一个单引号。 以第一个元素的数据类型作为数组的数据类型,要求数组中所有元素的类型相同,或者能够相互转换。
  • 数组类型的定义 一个数组数据类型可以通过在数组元素的数据类型名称后面加上方括号([])来命名。 例如,创建表books,其中表示书本价格的列price的类型为一维integer类型数组,表示书本标签的列tag的类型为二维text类型数组。 1 CREATE TABLE books (id SERIAL PRIMARY KEY, title VARCHAR(100), price_by_quarter int[], tags TEXT[][]); CREATE TABLE语法可以指定数组的大小,例如: 1 CREATE TABLE test ( a int[3]); 当前的数据库实现会忽略语句中数组的大小限制,即其行为与未指定长度的数组相同。同时,也不会强制所声明的维度数。一个特定元素类型的数组全部被当作是相同的类型,而忽略其大小或维度数。 也可以使用关键词ARRAY来定义一维数组。表books中的列price使用ARRAY定义并指定数组大小,如下所示: 1 price_by_quarter int ARRAY[4] 使用ARRAY定义,不指定数组尺寸: 1 price_by_quarter int ARRAY
  • 复合类型的声明 GaussDB(DWS)支持用户使用CREATE TYPE定义复合类型: 1 2 3 4 5 6 7 8 9 10 CREATE TYPE complex AS ( r double precision, i double precision ); CREATE TYPE inventory_item AS ( name text, supplier_id integer, price numeric ); 定义复合类型之后,可用来创建表或函数: 1 2 3 4 5 6 CREATE TABLE on_hand ( item inventory_item, count integer ); INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000); 1 2 3 4 CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric AS 'SELECT $1.price * $2' LANGUAGE SQL; SELECT price_extension(item, 10) FROM on_hand;
  • 构造复合值 要把复合值写作文字常量,可以将字段值括在圆括号中,并用逗号分隔。可以在任何字段值加上双引号,如果字段值包含逗号或括号则必须这样做。复合常量的一般格式如下: 1 '( val1 , val2 , ... )' 上文中的'("fuzzy dice",42,1.99)'便属于inventory_item类型的一个合法值。 要让一个字段为NULL,在列表中对应位置上空出即可。如果需要一个字段为空字符串,使用引号即可。例如下列示例,第一个字段是非NULL空字符串,第三个是NULL: 1 '("",42,)' ROW表达式也能被用来构建组合值。例如: 1 2 ROW('fuzzy dice', 42, 1.99) ROW('', 42, NULL)
  • 示例2:通过行级控制实现分区权限管理 创建用户alice: 1 CREATE ROLE alice PASSWORD '{password1}'; 创建范围分区表web_returns_p1,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE web_returns_p1 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(800) END(830) EVERY(1) ); INSERT INTO web_returns_p1 values (801,17,11,102); INSERT INTO web_returns_p1 values (802,18,12,103); 将表web_returns_p1的读取权限赋予alice用户: 1 GRANT SELECT ON web_returns_p1 TO alice; 打开行访问控制策略开关: 1 ALTER TABLE web_returns_p1 ENABLE ROW LEVEL SECURITY; 创建行级访问控制策略web_returns_rsl。其中wr_returned_date_sk为web_returns_p1分区表的分区名,801为分区值: 1 CREATE ROW LEVEL SECURITY POLICY web_returns_rsl ON web_returns_p1 USING('wr_returned_date_sk' = '801'); 将行级访问控制策略web_returns_rsl的赋予用户alice: 1 ALTER ROW LEVEL SECURITY POLICY web_returns_rsl ON web_returns_p1 TO alice; 切换至alice用户: 1 set role alice password '{password1}'; 查询表web_returns_p1: 1 select * from web_returns_p1;
  • 语法格式 1 2 3 4 5 CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ AS { PERMISSIVE | RESTRICTIVE } ] [ FOR { ALL | SELECT | UPDATE | DELETE } ] [ TO { role_name | PUBLIC } [, ...] ] USING ( using_expression )
  • 参数说明 policy_name 行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。 table_name 行访问控制策略的表名。 PERMISSIVE 指定行访问控制策略的类型为宽容性策略。对于一个给定的查询,将使用“OR”操作符将所有的宽容性策略组合。行访问控制策略的类型默认为宽容性策略。 RESTRICTIVE 指定行访问控制策略的类型为限制性策略。对于一个给定的查询,将使用“AND”操作符将所有的限制性策略组合。 至少需要一条宽容性策略允许对记录的访问。如果只有限制性策略存在,则不能访问任何记录。当宽容性和限制性策略共存时,只有当记录能通过至少一条宽容性策略以及所有的限制性策略时,该记录才能访问。 command 当前行访问控制影响的SQL操作,可指定操作包括:ALL、SELECT、UPDATE、DELETE。当未指定时,ALL为默认值,涵盖SELECT、UPDATE、DELETE操作。 当command为SELECT时,SELECT类操作受行访问控制的影响,只能查看到满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。 当command为UPDATE时,UPDATE类操作受行访问控制的影响,只能更新满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括UPDATE, UPDATE ... RETURNING, SELECT ... FOR UPDATE/SHARE。 当command为DELETE时,DELETE类操作受行访问控制的影响,只能删除满足条件(using_expression返回值为TRUE)的元组数据,受影响的操作包括DELETE, DELETE ... RETURNING。 行访问控制策略与适配的SQL语法关系参见下表: 表1 ROW LEVEL SECURITY策略与适配SQL语法关系 Command SELECT/ALL policy UPDATE/ALL policy DELETE/ALL policy SELECT Existing row No No SELECT FOR UPDATE/SHARE Existing row Existing row No UPDATE No Existing row No UPDATE RETURNING Existing row Existing row No DELETE No No Existing row DELETE RETURNING Existing row No Existing row role_name 行访问控制影响的数据库用户。 当未指定时,PUBLIC为默认值,PUBLIC表示影响所有数据库用户,可以指定多个受影响的数据库用户。 系统管理员不受行访问控制特性影响。
  • 注意事项 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行访问控制策略。 不支持HDFS表、外表、临时表定义行访问控制策略。 不支持对视图定义行访问控制策略。 同一张表上可以创建多个行访问控制策略,一张表最多创建100个行访问控制策略。 系统管理员不受行访问控制影响,可以查看表的全量数据。 通过SQL语句、视图、函数、存储过程查询包含行访问控制策略的表,都会受影响。 不支持对行访问控制策略依赖的列进行类型修改。例如,不支持如下修改: 1 ALTER TABLE public.all_data ALTER COLUMN role TYPE text;
  • 功能描述 对表创建行访问控制策略。 对表创建行访问控制策略时,需打开该表的行访问控制开关(ALTER TABLE ... ENABLE ROW LEVEL SECURITY)策略才能生效,否则不生效。 当前行访问控制会影响数据表的读取操作(SELECT、UPDATE、DELETE),暂不影响数据表的写入操作(INSERT、MERGE INTO)。表所有者或系统管理员可以在USING子句中创建表达式,并在客户端执行数据表读取操作时,数据库后台在查询重写阶段会将满足条件的表达式拼接并应用到执行计划中。针对数据表的每一条元组,当USING表达式返回TRUE时,元组对当前用户可见,当USING表达式返回FALSE或NULL时,元组对当前用户不可见。 行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。 行访问控制策略可以应用到指定的操作(SELECT、UPDATE、DELETE、ALL),ALL表示会影响SELECT、UPDATE、DELETE三种操作;定义行访问控制策略时,若未指定受影响的相关操作,默认为ALL。 行访问控制策略可以应用到指定的用户(角色),也可应用到全部用户(PUBLIC);定义行访问控制策略时,若未指定受影响的用户,默认为PUBLIC。
  • 注意事项 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。后面必须调用ALTER TEXT SEARCH CONFIGURATION命令创建映射使配置生效。如果声明了COPY选项,那么会自动拷贝指定的文本搜索配置的解析器、映射、配置选项等信息。 若模式名称已给出,那么文本搜索配置会在声明的模式中创建,否则会在当前模式创建。 定义文本搜索配置的用户成为其所有者。 PARSER和COPY选项是互相排斥的,因为当一个现有配置被复制,其分析器配置也被复制了。
  • 参数说明 name 要创建的文本搜索配置的名称。该名称可以有模式修饰。 parser_name 用于该配置的文本搜索分析器的名称。 source_config 要复制的现有文本搜索配置的名称。 configuration_option 文本搜索配置的配置参数,主要是针对parser_name执行的解析器,或者source_config隐含的解析器而言的。 取值范围:目前共支持default、ngram、zhparser三种类型的解析器,其中default类型的解析器没有对应的configuration_option,ngram、zhparser类型解析器对应的configuration_option如表1所示。 表1 ngram、zhparser类型解析器对应的配置参数 解析器 配置参数 参数描述 取值范围 ngram gram_size 分词长度。 正整数,1~4 默认值:2 punctuation_ignore 是否忽略标点符号。 true(默认值):忽略标点符号。 false:不忽略标点符号。 grapsymbol_ignore 是否忽略图形化字符。 true:忽略图形化字符。 false(默认值):不忽略图形化字符。 zhparser punctuation_ignore 分词结果是否忽略所有的标点等特殊符号(不会忽略\r和\n)。 true(默认值):忽略所有的标点等特殊符号。 false:不忽略所有的标点等特殊符号。 seg_with_duality 是否将闲散文字自动以二字分词法聚合。 true:将闲散文字自动以二字分词法聚合。 false(默认值):不将闲散文字自动以二字分词法聚合。 multi_short 分词执行时是否执行针对长词复合切分。 true(默认值):执行针对长词复合切分。 false:不执行针对长词复合切分。 multi_duality 设定是否将长词内的文字自动以二字分词法聚合。 true:将长词内的文字自动以二字分词法聚合。 false(默认值):不将长词内的文字自动以二字分词法聚合。 multi_zmain 是否将重要单字单独显示。 true:将重要单字单独显示。 false(默认值):不将重要单字单独显示。 multi_zall 是否将全部单字单独显示。 true:将全部单字单独显示。 false(默认值):不将全部单字单独显示。
  • 示例 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION ngram1 (parser=ngram) WITH (gram_size = 2, grapsymbol_ignore = false); 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION ngram2 (copy=ngram1) WITH (gram_size = 2, grapsymbol_ignore = false); 创建文本搜索配置: 1 CREATE TEXT SEARCH CONFIGURATION english_1 (parser=default);
  • 功能描述 创建一个预备语句。 预备语句是服务端的对象,可以用于优化性能。在执行PREPARE语句的时候,指定的查询被解析、分析、重写。当随后发出EXECUTE语句的时候,预备语句被规划和执行。这种设计避免了重复解析、分析工作。PREPARE语句创建后在整个数据库会话期间一直存在,一旦创建成功,即便是在事务块中创建,事务回滚,PREPARE也不会删除。只能通过显式调用DEALLOCATE进行删除,会话结束时,PREPARE也会自动删除。
  • 示例 为一个INSERT语句创建一个预备语句,然后执行它: 1 2 PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52');
共100000条