华为云用户手册

  • 示例 创建一个名为serial的递增序列,从101开始: 1 2 3 CREATE SEQUENCE serial START 101 CACHE 20; 从序列中选出下一个数字: 1 2 3 4 SELECT nextval('serial'); nextval --------- 101 从序列中选出下一个数字: 1 2 3 4 SELECT nextval('serial'); nextval --------- 102 创建与表关联的序列: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 CREATE TABLE customer_address ( ca_address_sk integer not null, ca_address_id char(16) not null, ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) ; CREATE SEQUENCE serial1 START 101 CACHE 20 OWNED BY customer_address.ca_address_sk; 使用serial创建主键自增序列表serial_table: 1 2 3 4 5 6 7 8 9 CREATE TABLE serial_table(a int, b serial); INSERT INTO serial_table (a) VALUES (1),(2),(3); SELECT * FROM serial_table ORDER BY b; a | b ---+--- 1 | 1 2 | 2 3 | 3 (3 rows)
  • 参数说明 name 将要创建的序列名称。 取值范围:仅可以使用小写字母(a~z)、 大写字母(A~Z),数字和特殊字符"#","_","$"的组合。 increment 指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。 缺省值:1。 MINVALUE minvalue | NO MINVALUE| NOMINVALUE 执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。 NOMINVALUE等价于NO MINVALUE MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE 执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。 NOMAXVALUE等价于NO MAXVALUE start 指定序列的起始值。 缺省值:对于递增序列为minvalue,递减序列为maxvalue。 cache 为了快速访问,而在内存中预先存储序列号的个数。一个缓存周期内,CN不再向GTM索取序列号,而是使用本地预先申请的序列号。 缺省值为1,表示一次只能生成一个值,也就是没有缓存。 不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。 建议cache值不要设置过大,否则会出现缓存序列号时(每个cache周期的第一个nextval)耗时过长的情况;同时建议cache值小于100000000。实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会浪费序列号。 CYCLE 用于使序列达到maxvalue或者minvalue后可循环并继续下去。 如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。 NOCYCLE的作用等价于NO CYCLE。 缺省值为NO CYCLE。 若定义序列为CYCLE,则不能保证序列的唯一性。 OWNED BY- 将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和Sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。 缺省值为OWNED BY NONE,表示不存在这样的关联。 通过OWNED BY创建的Sequence不建议用于其他表,如果希望多个表共享Sequence,该Sequence不应该从属于特定表。
  • 注意事项 SEQUENCE是一个存放等差数列的特殊表,该表受DBMS控制。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。 如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名字不同。 创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。 不支持在template1数据库中创建SEQUENCE。
  • 语法格式 1 2 3 4 CREATE SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE ] [ OWNED BY { table_name.column_name | NONE } ];
  • 系统表隐藏字段名作字段名 定义字段名和GaussDB(DWS)中系统表隐藏字段重名,需重新命名:包括xc_node_id,tableoid, cmax, xmax, cmin, xmin, ctid, tid;重新命名方式,字段后加_new,例如xc_node_id改为xc_node_id_new。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 DROP TABLE IF EXISTS `renameFieldName`; CREATE TABLE IF NOT EXISTS `renameFieldName`( xc_node_id int, tableoid char(3), cmax smallint, xmax bigint auto_increment, cmin varchar(10), xmin int, ctid int auto_increment, tid int ); DROP TABLE IF EXISTS `renameFieldName`; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 DROP TABLE IF EXISTS "public"."renamefieldname"; CREATE TABLE IF NOT EXISTS "public"."renamefieldname" ( "xc_node_id_new" INTEGER, "tableoid_new" CHAR(12), "cmax_new" SMALLINT, "xmax_new" BIGSERIAL, "cmin_new" VARCHAR(40), "xmin_new" INTEGER, "ctid_new" SERIAL, "tid_new" INTEGER ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("xc_node_id_new"); DROP TABLE IF EXISTS "public"."renamefieldname";
  • 保留关键字作字段名 在GaussDB(DWS)中保留关键字作字段名需要加双引号,目前工具支持的保留关键字有desc、checksum、operator、size等。 输入示例 1 2 3 4 5 6 7 CREATE TABLE `desc` ( user char, checksum int, operator smallint, desc char, size bigint ); 输出示例 1 2 3 4 5 6 7 CREATE TABLE "public"."desc" ( "user" CHAR(4), "checksum" INTEGER, "operator" SMALLINT, "desc" CHAR(4), "size" BIGINT ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("user");
  • 注意事项 只有系统管理员才能执行EXECUTE DIRECT。 为了各个节点上数据的一致性,SQL语句仅支持SELECT,不允许执行事务语句、DDL、DML。 使用此类型语句在指定的DN执行AVG聚集计算时,返回结果集是以数组形式返回,如{4,2},表示sum结果为4,count结果为2。 由于CN节点不存储用户表数据,不允许指定CN节点执行用户表上的SELECT查询。 不允许执行嵌套的EXECUTE DIRECT语句,即执行的SQL语句不能同样是EXECUTE DIRECT语句,此时可直接执行最内层EXECUTE DIRECT语句代替。
  • TRUNCATE 删除表 MySQL在使用TRUNCATE语句删除表数据时可以省略 "TABLE"关键字,GaussDB(DWS) 不支持这种用法。此外,DSC工具在做迁移TRUNCATE语句时会添加 "CONTINUE IDENTITY RESTRICT"关键字。 输入示例 1 2 TRUNCATE TABLE `public`.`test_create_table01`; TRUNCATE TEST_CREATE_TABLE01; 输出示例 1 2 TRUNCATE TABLE "public"."test_create_table01" CONTINUE IDENTITY RESTRICT; TRUNCATE TABLE "public"."test_create_table01" CONTINUE IDENTITY RESTRICT; 父主题: 表(可选参数、操作)
  • 创建数据库 在“对象浏览器”窗格中右键单击“数据库”组,选择“创建数据库”。 弹出“创建数据库”对话框,提示您提供创建数据库所需信息。 输入数据库名称。 从“数据库编码”中选择所需编码字符集类型。数据库支持UTF-8、GBK、SQL_ASCII和LATIN1编码字符集,使用其他编码字符集创建数据库可能导致操作出错。 只有当至少存在一个已连接的数据库时才能执行此操作。 勾选“连接到该数据库”,然后单击“确定”。 状态栏显示已完成操作的状态。 “对象浏览器”显示所创建的数据库。服务器上系统相关模式自动添加到新的数据库。
  • 语法格式 设置外表属性: 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] table_name OPTIONS ( {[ ADD | SET | DROP ] option ['value']} [, ... ]); 设置外表的所有者: 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] tablename OWNER TO new_owner; 更新外表列: 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] table_name MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] ); 修改外表的列: 1 2 ALTER FOREIGN TABLE [ IF EXISTS ] tablename action [, ... ]; 其中action语法为: 1 2 3 4 5 6 7 ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type | ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL | ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer | ALTER [ COLUMN ] column_name OPTIONS ( {[ ADD | SET | DROP ] option ['value'] } [, ... ]) | MODIFY column_name data_type | MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | MODIFY column_name [ CONSTRAINT constraint_name ] NULL 参考ALTER TABLE。
  • 参数说明 IF EXISTS 如果不存在相同名称的表,不会抛出错误,而会返回一个通知,告知表不存在。 tablename 需要修改的外表名称。 取值范围:已存在的外表名。 new_owner 外表的新所有者。 取值范围:字符串,有效的用户名。 data_type 现存字段的新类型。 取值范围:字符串,需符合标识符的命名规范 constraint_name 要添加/删除的约束的名称。 column_name 现存字段的名称。 取值范围:字符串,需符合标识符的命名规范。 修改外表语法中其他参数如IF EXISTS,请参见ALTER TABLE的参数说明。
  • 基本文本匹配 GaussDB(DWS)的全文检索基于匹配算子@@,当一个tsvector(document)匹配到一个tsquery(query)时,则返回true。其中,tsvector(document)和tsquery(query)两种数据类型可以任意排序。 1 2 3 4 5 SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector @@ 'cat & rat'::tsquery AS RESULT; result ---------- t (1 row) 1 2 3 4 5 SELECT 'fat & cow'::tsquery @@ 'a fat cat sat on a mat and ate a fat rat'::tsvector AS RESULT; result ---------- f (1 row) 正如上面例子表明,tsquery不仅是文本,且比tsvector包含的要多。tsquery包含已经标注化为词条的搜索词,同时可能是使用AND、OR、或NOT操作符连接的多个术语。详细请参见文本搜索类型。函数to_tsquery和plainto_tsquery对于将用户书写文本转换成适合的tsquery是非常有用的,比如将文本中的词标准化。类似地,to_tsvector用于解析和标准化文档字符串。因此,实际中文本搜索匹配看起来更像这样: 1 2 3 4 5 SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat & rat') AS RESULT; result ---------- t (1 row) 需要注意的是,下面这种方式是不可行的: 1 2 3 4 5 SELECT 'fat cats ate fat rats'::tsvector @@ to_tsquery('fat & rat')AS RESULT; result ---------- f (1 row) 由于tsvector没有对rats进行标准化,所以rats不匹配rat。 @@操作符也支持text输入,允许一个文本字符串的显示转换为tsvector或者在简单情况下忽略tsquery。可用形式是: 1 2 3 4 tsvector @@ tsquery tsquery @@ tsvector text @@ tsquery text @@ text 形式text @@ tsquery等价于to_tsvector(text) @@ tsquery,而text @@ text等价于to_tsvector(text) @@ plainto_tsquery(text)。 父主题: 介绍
  • pg_collation_actual_version (oid) 描述:返回当前安装在操作系统中的该排序规则对象的实际版本,目前仅对case_insensitive有效。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT oid FROM pg_collation WHERE collname ='case_insensitive'; oid ------ 3300 (1 row) SELECT pg_collation_actual_version(3300); pg_collation_actual_version ----------------------------- 153.14 (1 row)
  • isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 1 2 3 4 5 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) 1 2 3 4 5 SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row)
  • epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 1 2 3 4 5 SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08 (1 row)
  • week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7 (1 row)
  • day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row)
  • month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row)
  • century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 示例: 1 2 3 4 5 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row)
  • WITH AS WITH AS 在GaussDB(DWS)中用于声明一个或多个可以在主查询中通过名字引用的子查询,相当于临时表。DSC工具支持该关键字,迁移工程中保留。 输入示例 1 2 3 4 5 6 7 8 9 10 WITH e AS ( SELECT city, sum(population) FROM t1 group by city ), d AS ( SELECT max(music) as max_music, min(music) as min_music from student ), s AS ( SELECT * FROM subject ) SELECT * FROM e; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 WITH e AS ( SELECT city, sum(population) FROM t1 GROUP BY city ), d AS ( SELECT max(music) AS "max_music", min(music) AS "min_music" FROM student ), s AS ( SELECT * FROM subject ) SELECT * FROM e; 父主题: 表(可选参数、操作)
  • REPLACE MySQL的REPLACE操作形式包括:LOW_PRIORITY、PARTITION 、DELAYED 、VALUES、SET;(下述迁移示例为临时迁移方案) REPLACE的工作方式与INSERT完全相同,不同之处在于,如果表中的旧行与主键或唯一索引的新行具有相同的值,则在插入新行之前删除该旧行。 LOW_PRIORITY PARTITION DELAYED VALUES SET 父主题: 数据操作语句(DML)
  • 定义脱敏策略 数据脱敏策略是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。用户可以在指定表对象创建脱敏策略,并限定策略生效范围,也可以新增、修改、删除脱敏列信息。所涉及的SQL语句,请参考下表。 表8 脱敏策略定义相关SQL 功能 相关SQL 对表创建数据脱敏策略 CREATE REDACTION POLICY 修改应用在指定表的脱敏策略 ALTER REDACTION POLICY 删除应用在指定表的脱敏策略 DROP REDACTION POLICY
  • 定义文本搜索配置 文本搜索配置指定了文本搜索解析器,该文本搜索解析器可以将字符串划分为标记,外加一些词典(可被用来决定哪些标记是搜索感兴趣的)。所涉及的SQL语句,请参考下表。 表17 文本搜索配置相关SQL 功能 相关SQL 创建文本搜索配置 CREATE TEXT SEARCH CONFIGURATION 修改文本搜索配置 ALTER TEXT SEARCH CONFIGURATION 删除文本搜索配置 DROP TEXT SEARCH CONFIGURATION
  • 定义全文检索词典 词典是在全文检索时识别特定词并进行处理。词典的创建依赖于预定义模板(在系统表PG_TS_TEMPLATE中定义),支持创建五种类型的词典,分别是Simple、Ispell、Synonym、Thesaurus、以及Snowball,每种类型的词典可以完成不同的任务。所涉及的SQL语句,请参考下表。 表18 全文检索词典相关SQL 功能 相关SQL 创建全文检索词典 CREATE TEXT SEARCH DICTIONARY 修改全文检索词典 ALTER TEXT SEARCH DICTIONARY 删除全文检索词典 DROP TEXT SEARCH DICTIONARY
  • 定义行级访问控制 行级访问控制策略控制数据库表中行级数据可见性。不同用户执行相同的SQL查询操作,读取到的结果不同。所涉及的SQL语句,请参考下表。 表9 行级访问控制定义相关SQL 功能 相关SQL 创建行访问控制策略 CREATE ROW LEVEL SECURITY POLICY 修改已存在的行访问控制策略 ALTER ROW LEVEL SECURITY POLICY 删除表上某个行访问控制策略 DROP ROW LEVEL SECURITY POLICY
  • 定义分区表 分区表是一种逻辑表,数据是由普通表存储的,主要用于提升查询性能。所涉及的SQL语句,请参考下表。 表4 分区表定义相关SQL 功能 相关SQL 创建分区表 CREATE TABLE PARTITION 修改分区 ALTER TABLE PARTITION 修改分区表属性 ALTER TABLE PARTITION 删除分区 ALTER TABLE PARTITION 删除分区表 DROP TABLE
  • 支持中文字符 输入:中文( 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:中文) 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:中文, 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 输入:支持中文SPACE 1 CREATE TABLE test11(a int,b int)/*CREATE TABLE test11(a int,b int)*/; 输出 1 CREATE TABLE test11 (a INT,b INT)/*CREATE TABLE test11(a int,b int)*/; 父主题: Oracle语法迁移
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE [ OR REPLACE ] PROCEDURE procedure_name [ ( {[ argmode ] [ argname ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ] [ { IMMUTABLE | STABLE | VOLATILE } | { SHIPPABLE | NOT SHIPPABLE } | {PACKAGE} | [ NOT ] LEAKPROOF | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} | COST execution_cost | ROWS result_rows | SET configuration_parameter { [ TO | = ] value | FROM CURRENT } ][ ... ] { IS | AS } plsql_body /
  • 参数说明 OR REPLACE 当存在同名的存储过程时,替换原来的定义。 procedure_name 创建的存储过程名字,可以带有模式名。 取值范围:字符串,要符合标识符的命名规范。 argmode 参数的模式。 VARIADIC用于声明数组类型的参数。 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。 argname 参数的名字。 取值范围:字符串,要符合标识符的命名规范。 argtype 参数的数据类型。 取值范围:可用的数据类型。 IMMUTABLE、STABLE等 行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见5.18.17.13-CREATE FUNCTION plsql_body PL/SQL存储过程体。 当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。 argument_name和argmode的顺序没有严格要求,推荐按照argument_name、argmode、argument_type的顺序使用。
  • 注意事项 如果创建存储过程时参数或返回值带有精度,不进行精度检测。 创建存储过程时,存储过程定义中对表对象的操作建议都显示指定模式,否则可能会导致存储过程执行异常。 在创建存储过程时,存储过程内部通过SET语句设置current_schema和search_path无效。执行完函数search_path和current_schema与执行函数前的search_path和current_schema保持一致。 如果存储过程参数中带有出参,SELECT调用存储过程必须缺省出参,CALL调用存储过程适配Oracle,调用非重载函数时必须指定出参,对于重载的package函数,out参数可以缺省,具体信息参见CALL的示例。 存储过程指定package属性时支持重载。 在创建procedure时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 在多个CN的集群中,不能将存储过程的入参或出参设置为临时表类型,因为在非当前连接CN上执行创建存储存储过程时,无法单独根据表名获取到正确的临时schema,进而无法获取到准确的表类型。
共100000条