华为云用户手册

  • pgxc_verify_residualfiles() 描述:pg_verify_residualfiles()的CN统一查询函数。该函数为集群级函数,与当前所在的数据库相关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表3 pgxc_verify_residualfiles()返回字段 名称 类型 描述 nodename text 节点名称 result bool 是否完成验证 filepath text 残留文件记录路径 notes text 注释 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_verify_residualfiles(); nodename | result | filepath | notes --------------+--------+---------------------------+------- cn_5001 | t | pgrf_20200910170129360401 | dn_6001_6002 | t | pgrf_20200908160211441546 | (2 rows) 本函数只能验证记录的文件在当前登录的数据库中是否是残留文件。如果记录的文件不属于当前登录的数据库,则不会进行校验行为。
  • pg_verify_residualfiles(filepath) 描述:用于验证参数指定文件中记录的文件是否为残留文件。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 参数类型:text 返回值类型:bool 函数返回字段如下: 表1 pg_verify_residualfiles(filepath)返回字段 名称 类型 描述 isverified bool 是否完成验证 示例: 1 2 3 4 5 SELECT * FROM pg_verify_residualfiles('pgrf_20200908160211441546'); isverified ------------ t (1 row) 本函数只能验证记录的文件在当前登录的数据库中是否是残留文件。如果记录的文件不属于当前登录的数据库,则不会进行校验行为。
  • 词典概述 词典用于定义停用词(stop words),即全文检索时不搜索哪些词。 词典还可以用于对同一词的不同形式进行规范化,这样同一个词的不同派生形式都可以进行匹配。规范化后的词称为词位(lexeme)。 除了提高检索质量外,词的规范化和删除停用词可以减少文档tsvector格式的大小, 从而提高性能。词的规范化和删除停用词并不总是具有语言学意义,用户可以根据应用环境在词典定义文件中自定义规范化和删除规则。 一个词典是一个程序,接收标记(token)作为输入,并返回: 如果token在词典中已知,返回对应lexeme数组(注意,一个标记可能对应多个lexeme)。 一个lexeme。一个新token会代替输入token被传递给后继词典(当前词典可被称为过滤词典)。 如果token在词典中已知,但它是一个停用词,返回空数组。 如果词典不能识别输入的token,返回NULL。 GaussDB (DWS)提供了多种语言的预定义词典,同时提供了五种预定义的词典模板,分别是Simple,Synonym,Thesaurus,Ispell,和Snowball,可用于创建自定义参数的新词典。 在使用全文检索时,建议用户: 可以在文本搜索配置中定义一个解析器,以及一组用于处理该解析器的输出标记词典。对于解析器返回的每个标记类型,可以在配置中指定不同的词典列表进行处理。当解析器输出一种类型的标记后,在对应列表的每个词典中会查阅该标记,直到某个词典识别它。如果它被识别为一个停用词, 或者没有任何词典识别,该token将被丢弃,即不被索引或检索到。通常情况下,第一个返回非空结果的词典决定了最终结果,后继词典将不会继续处理。但是一个过滤类型的词典可以依据规则替换输入token,然后将替换后的token传递给后继词典进行处理。 配置词典列表的一般规则是,第一个位置放置一个应用范围最小的、最具体化定义的词典,其次是更一般化定义的词典, 最后是一个普适定义的词典,比如Snowball词干词典或Simple词典。在下面例子中,对于一个针对天文学的文本搜索配置astro_en,可以定义标记类型asciiword(ASCII词)对应的词典列表为:天文术语的Synonym同义词词典, Ispell英语词典和Snowball英语词干词典。 1 2 ALTER TEXT SEARCH CONFIGURATION astro_en ADD MAPPING FOR asciiword WITH astro_syn, english_ispell, english_stem; 过滤类型的词典可以放置在词典列表中除去末尾的任何地方,放置在末尾时是无效的。使用这些词典对标记进行部分规范化,可以有效简化后继词典的处理。 父主题: 词典
  • IGNORE MySQL INSERT语句如果使用IGNORE修饰符,则执行INSERT语句时发生的错误将被忽略。 输入示例 1 2 3 4 5 6 7 8 9 10 # 如果表中已经存在相同的记录,则忽略当前新数据 INSERT IGNORE INTO exmp_tb2 VALUES(189, '189.23','nice','2017-11-12'); INSERT IGNORE INTO exmp_tb2 VALUES(130,'189.23','nice','2017-11-12'); INSERT IGNORE INTO exmp_tb2 VALUES(120,15.68,'good','2018-11-12'); INSERT IGNORE INTO exmp_tb2 VALUES(DEFAULT,128.23,'nice','2018-10-11'); INSERT IGNORE INTO exmp_tb2 VALUES(DEFAULT,DEFAULT,'nice','2018-12-14'); INSERT IGNORE INTO exmp_tb2 VALUES(DEFAULT,DEFAULT,'nice',DEFAULT); INSERT IGNORE INTO exmp_tb2 (tb2_id,tb2_price) VALUES(DEFAULT,DEFAULT); INSERT IGNORE INTO exmp_tb2 (tb2_id,tb2_price,tb2_note) VALUES(DEFAULT,DEFAULT,DEFAULT); INSERT IGNORE INTO exmp_tb2 (tb2_id,tb2_price,tb2_note,tb2_date) VALUES(DEFAULT,DEFAULT,DEFAULT,DEFAULT); 输出示例 1 2 3 4 5 6 7 8 9 10 -- 如果表中已经存在相同的记录,则忽略当前新数据 INSERT INTO "public"."exmp_tb2" VALUES (101,'189.23','nice','2017-11-12'); INSERT INTO "public"."exmp_tb2" VALUES (130,'189.23','nice','2017-11-12'); INSERT INTO "public"."exmp_tb2" VALUES (120,15.68,'good','2018-11-12'); INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,128.23,'nice','2018-10-11'); INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,DEFAULT,'nice','2018-12-14'); INSERT INTO "public"."exmp_tb2" VALUES (DEFAULT,DEFAULT,'nice',DEFAULT); INSERT INTO "public"."exmp_tb2" ("tb2_id","tb2_price") VALUES (DEFAULT,DEFAULT); INSERT INTO "public"."exmp_tb2" ("tb2_id","tb2_price","tb2_note") VALUES (DEFAULT,DEFAULT,DEFAULT); INSERT INTO "public"."exmp_tb2" ("tb2_id","tb2_price","tb2_note","tb2_date") VALUES (DEFAULT,DEFAULT,DEFAULT,DEFAULT); 父主题: INSERT
  • 示例 DISCARD VOLATILE临时表 DISCARD操作后,清理当前会话中所有volatile临时表相关资源。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE VOLATILE TEMP TABLE TX1(A INT) DISTRIBUTE BY HASH(A); CREATE TABLE CREATE VOLATILE TEMP TABLE TX2(A INT) DISTRIBUTE BY HASH(A); CREATE TABLE SELECT * FROM TX1; a --- (0 rows) SELECT * FROM TX2; a --- (0 rows) DISCARD VOLATILE TEMP; SELECT * FROM TX1; ERROR: relation "tx1" does not exist LINE 1: SELECT * FROM TX1; ^ SELECT * FROM TX2; ERROR: relation "tx2" does not exist LINE 1: SELECT * FROM TX2; DISCARD TEMP DISCARD TEMP操作后,清理当前会话中所有临时表相关资源。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE GLOBAL TEMP TABLE t_global_temp(a int,b int); 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 t_global_temp VALUES(1,1),(2,2); INSERT 0 2 CREATE VOLATILE TEMP TABLE t_volatile_temp(a int,b int); CREATE TEMP TABLE t_temp(a int,b int); DISCARD TEMP; SELECT * FROM t_global_temp; a | b ---+--- (0 rows) SELECT * FROM t_volatile_temp; ERROR: relation "t_volatile_temp" does not exist LINE 1: select * from t_volatile_temp; SELECT * FROM t_temp; ERROR: relation "t_temp" does not exist LINE 1: select * from t_temp;
  • 参数说明 VOLATILE { TEMPORARY | TEMP } 表示释放当前会话中VOLATILE临时表相关资源。 执行DISCARD VOLATILE { TEMPORARY | TEMP }操作后,当前session内所有volatile临时表资源都会被清理,不支持清理单个volatile临时表资源。 TEMP | TEMPORARY 释放当前会话中所有临时表的相关资源,包括VOLATILE临时表和GLOBAL临时表。 PLANS 释放当前会话中所有缓存的查询计划,强制在下次使用相关prepare语句时重新规划。 SEQUEN CES 丢弃缓存的所有序列相关的状态,包括currval()/lastval()信息和任何至今还未通过nextval()返回的预先分配的序列值。 ALL 释放所有与当前会话相关的临时资源,并重置到其初始状态,这与执行以下语句序列有几乎相同的效果: SET SESSION AUTHORIZATION DEFAULT; RESET ALL; DEALLOCATE ALL; CLOSE ALL; UNLISTEN *; SELECT pg_advisory_unlock_all(); DISCARD PLANS; DISCARD SEQUENCES; DISCARD TEMP; 执行DISCARD ALL成功之后,以pg_temp和pg_toast_temp开头的schema也会被删除。 DISCARD ALL不允许在事务中执行。
  • 示例 清理当前数据库中的所有表: 1 VACUUM; 仅回收表tpcds.web_returns_p1分区P2的空间,不更新统计信息: 1 VACUUM FULL tpcds.web_returns_p1 PARTITION(P2); 回收表tpcds.web_returns_p1空间,并更新统计信息: 1 VACUUM FULL ANALYZE tpcds.web_returns_p1; 清理当前数据库中的所有表并收集查询优化器的统计信息: 1 VACUUM ANALYZE; 仅清理特定表reason: 1 VACUUM (VERBOSE, ANALYZE) tpcds.reason; 对列存表table_delta进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta; 仅对列存表table_delta的分区p1进行DELTAMERGE操作: 1 VACUUM DELTAMERGE tpcds.table_delta partition(p1);
  • 语法格式 回收空间并更新统计信息,关键字顺序必须按语法显示的顺序给出。 1 2 VACUUM [ ( { FULL | FREEZE | VERBOSE | {ANALYZE | ANALYSE }} [,...] ) ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 仅回收空间,不更新统计信息。 1 VACUUM [ FULL [COMPACT] ] [ FREEZE ] [ VERBOSE ] [ table_name ] [ PARTITION ( partition_name ) ]; 回收空间并更新统计信息,且对关键字顺序有要求。 1 2 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ (column_name [, ...] ) ] ] [ PARTITION ( partition_name ) ]; 针对HDFS表,将delta table中的数据转移到主表存储。(partition_name参数仅8.2.1.300及以上集群版本支持) 1 VACUUM DELTAMERGE [ table_name ][partition_name]; 针对HDFS表,删除HDFS表在HDFS存储上的空值分区目录。 1 VACUUM HDFSDIRECTORY [ table_name ];
  • 参数说明 FULL 选择“FULL”清理,这样可以恢复更多的空间,但是需要耗时更多,并且在表上施加了排他锁。 FULL选项还可以带有COMPACT参数,该参数只针对HDFS表,指定该参数的VACUUM FULL操作性能要好于未指定该参数的VACUUM FULL操作。 COMPACT和PARTITION参数不能同时使用。 使用FULL参数会导致统计信息丢失,如果需要收集统计信息,请在VACUUM FULL语句中加上analyze关键字。 FREEZE 指定FREEZE相当于执行VACUUM时将vacuum_freeze_min_age参数设为0。 VERBOSE 为每个表打印一份详细的清理工作报告。 ANALYZE | ANALYSE 更新用于优化器的统计信息,以决定执行查询的最有效方法。 table_name 要清理的表的名称(可以有模式修饰)。 取值范围:要清理的表的名称。缺省时为当前数据库中的所有表。 column_name 要分析的具体的字段名称。 取值范围:要分析的具体的字段名称。缺省时为所有字段。 PARTITION HDFS表不支持PARTITION参数,PARTITION参数不能和COMPACT同时使用。 PARTITION参数和COMPACT同时使用会报错:COMPACT can not be used with PARTITION. partition_name 要清理的表的分区名称。缺省时为所有分区。 DELTAMERGE 只针对HDFS表,将HDFS表的delta table中的数据转移到主表存储上。对HDFS表而言,当delta表中数据量小于六万行,则不作迁移,只有在大于或者等于六万行数据时,将delta表中所有数据迁移到HDFS上,并通过truncate清理delta表的存储空间。 HDFSDIRECTORY 只针对HDFS表,删除HDFS表在HDFS存储上表目录下的空值分区目录。
  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的那个表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者,被授予了指定表VACUUM权限的用户或者被授予了gs_role_vacuum_any角色的用户,系统管理员默认拥有此权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好的选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 语法格式中含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 VACUUM列存表内部执行的操作包括三个:迁移delta表中的数据到主表、VACUUM主表的delta表、VACUUM主表的desc表。该操作不会回收delta表的存储空间,如果要回收delta表的冗余存储空间,需要对该列存表执行VACUUM DELTAMERGE。 VACUUM FULL系统表只能离线操作,在线VACUUM FULL系统表除了会锁表,还可能导致一些异常情况并产生报错。 如果有长查询访问系统表,此时执行VACUUM FULL,长查询可能会阻塞VACUUM FULL连接访问系统表,导致连接超时报错。 对列存分区表执行VACUUM FULL,会同时锁表和锁分区。 对不同的系统表执行VACUUM FULL并发操作可能会导致本地死锁。 VACUUM FULL操作分区表时与用户DML语句在如下特定场景有并发时可能发生分布式死锁,请谨慎操作: VACUUM FULL子分区与insert/update/delete主表。 VACUUM FULL全表与select全表/select子分区。 对表执行VACUUM FULL操作时会触发表重建(表重建过程中会先把数据转储到一个新的数据文件中,重建完成之后会删除原始文件),当表比较大时,重建会消耗较多的磁盘空间。当磁盘空间不足时,要谨慎对待大表VACUUM FULL操作,防止触发集群只读。
  • RoaringBitmap类型 GaussDB(DWS)自8.1.3集群版本开始,支持RoaringBitmap数据类型,用于存储位图数据集。 roaringbitmap数据类型支持行存,列存表。 表1 RoaringBitmap类型 名字 存储容量 描述 范围 RoaringBitmap 32 字节 存储位图数据集 -2,147,483,648~2,147,483,647 示例:创建带有roaringbitmap数据类型的表。 1 2 CREATE TABLE r_row (a int ,b text, c roaringbitmap); CREATE TABLE r_col (a int ,b text, c roaringbitmap) with (orientation=column); 父主题: 数据类型
  • 参数说明 SESSION 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现,则SESSION为缺省值。 如果在事务中执行了此命令,命令的产生影响将在事务回滚之后消失。如果该事务已提交,影响将持续到会话的结束,除非被另外一个SET命令重置参数。 LOCAL 声明的参数只在当前事务中有效。在COMMIT或ROLLBACK之后,会话级别的设置将再次生效。 不论事务是否提交,此命令的影响只持续到当前事务结束。一个特例是:在一个事务里面,即有SET命令,又有SET LOCAL命令,且SET LOCAL在SET后面,则在事务结束之前,SET LOCAL命令会起作用,但事务提交之后,则是SET命令会生效。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 例如:set schema 'public'; NAMES encoding_name 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 XML OPTION option 用于设置XML的解析方式。 取值范围:CONTENT(缺省)、DOCUMENT config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。
  • 语法格式 设置所处的时区。 1 SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }; 设置所属的模式。 1 2 3 SET [ SESSION | LOCAL ] {CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | SCHEMA 'schema'}; 设置客户端编码集。 1 SET [ SESSION | LOCAL ] NAMES encoding_name; 设置XML的解析方式。 1 SET [ SESSION | LOCAL ] XML OPTION { DOCUMENT | CONTENT }; 设置其他运行时参数。 1 2 3 SET [ LOCAL | SESSION ] { {config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }}};
  • 分词器测试 函数ts_debug允许简单测试文本搜索分词器。 1 2 3 4 5 6 7 8 ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) returns setof record ts_debug显示document的每个token信息,token是由解析器生成,由指定的词典进行处理。如果忽略对应参数,则使用config指定的分词器或者default_text_search_config指定的分词器。 ts_debug为文本解析器标识的每个token返回一行记录。记录中的列分别是: alias:text类型,token的别名。 description:text类型,token的描述。 token:text类型,token的文本内容。 dictionaries:regdictionary数组类型,是分词器为token选定的词典。 dictionary:regdictionary类型,用来识别token的词典。如果为空,则不做识别。 lexemes:text数组类型,词典识别token时生成的词素。如果为空,则不生成词素。空数组({})意味着token将被识别成停用词。 一个简单的例子: 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 SELECT * FROM ts_debug('english','a fat cat sat on a mat - it ate a fat rats'); alias | description | token | dictionaries | dictionary | lexemes -----------+-----------------+-------+----------------+--------------+--------- asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | fat | {english_stem} | english_stem | {fat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | cat | {english_stem} | english_stem | {cat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | sat | {english_stem} | english_stem | {sat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | on | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | mat | {english_stem} | english_stem | {mat} blank | Space symbols | | {} | | blank | Space symbols | - | {} | | asciiword | Word, all ASCII | it | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | ate | {english_stem} | english_stem | {ate} blank | Space symbols | | {} | | asciiword | Word, all ASCII | a | {english_stem} | english_stem | {} blank | Space symbols | | {} | | asciiword | Word, all ASCII | fat | {english_stem} | english_stem | {fat} blank | Space symbols | | {} | | asciiword | Word, all ASCII | rats | {english_stem} | english_stem | {rat} (24 rows) 父主题: 测试和调试文本搜索
  • DBMS_LOB.FREETEMPORARY DBMS_LOB.FREETEMPORARY函数释放默认临时表空间中的临时BLOB或CLOB。在调用FREETEMPORARY之后,释放的LOB定位器标记为无效。 输入:DBMS_LOB.CREATETEMPORARY和DBMS_LOB.FREETEMPORARY 1 2 3 4 5 6 7 8 DECLARE v_clob clob; BEGIN DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := TO_CLOB('abcddedf'); DBMS_OUTPUT.PUT_LINE(v_clob); DBMS_LOB.FREETEMPORARY(v_clob); end; / 输出 1 2 3 4 5 6 7 8 9 DECLARE v_clob clob ; BEGIN /*DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION);*/ v_clob := cast( 'abcddedf' as CLOB ) ; DBMS_OUTPUT.PUT_LINE ( v_clob ) ; /* DBMS_LOB.FREETEMPORARY(v_clob); */ null ; end ; /
  • DBMS_LOB.INSTR DBMS_LOB.INSTR函数从指定的偏移量开始,返回在LOB中第n次匹配模式的位置。 输入:在SQL中使用DBMS_LOB.INSTR 1 2 3 SELECT expr1, …, DBMS_LOB.INSTR(str, septr, 1, 5) FROM tab1 WHERE …; 输出 1 2 3 SELECT expr1, …, INSTR(str, septr, 1, 5) FROM tab1 WHERE … 输入:在PL/SQL中使用DBMS_LOB.INSTR 1 2 3 4 5 6 BEGIN … pos := DBMS_LOB.INSTR(str,septr,1, i); ... END; / 输出 1 2 3 4 5 6 BEGIN … pos := INSTR(str,septr,1, i); ... END; /
  • DBMS_LOB.SUBSTR DBMS_LOB.SUBSTR通过配置参数MigDbmsLob,用户可以指定迁移此函数还是直接保留。 输入:DBMS_LOB.SUBSTR,MigDbmsLob设为true 如果参数MigDbmsLob设为true,则迁移。相反,如果参数MigDbmsLob设为false,则不迁移。 输入 SELECT dbms_lob.substr('!2d3d4dd!',1,5); 输出 If the config param is true, it should be migrated as below: select substr('!2d3d4dd!',5,1); If false, it should be retained as it is: select dbms_lob.substr('!2d3d4dd!',1,5); 输入 SELECT dbms_lob.substr('!2d3d4dd!',5); 输出 If the config param is true, it should be migrated as below: select substr('!2d3d4dd!',1,5); If false, it should be retained as it is: select dbms_lob.substr('!2d3d4dd!',5);
  • DBMS_LOB.CREATETEMPORARY DBMS_LOB.CREATETEMPORARY函数在用户默认的临时表空间中创建一个临时LOB及其对应索引。DBMS_LOB.FREETEMPORARY用于删除临时LOB及其索引。 输入:DBMS_LOB.CREATETEMPORARY和DBMS_LOB.FREETEMPORARY 1 2 3 4 5 6 7 8 DECLARE v_clob clob; BEGIN DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := TO_CLOB('abcddedf'); DBMS_OUTPUT.PUT_LINE(v_clob); DBMS_LOB.FREETEMPORARY(v_clob); end; / 输出 1 2 3 4 5 6 7 8 9 DECLARE v_clob clob; BEGIN -- DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := CAST('abcddedf' AS CLOB); DBMS_OUTPUT.PUT_LINE(CAST(v_clob AS TEXT)); -- DBMS_LOB.FREETEMPORARY(v_clob); NULL; end; /
  • pg_rm_residualfiles(filepath) 描述:用于删除当前实例中指定残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:text 返回值类型:record 函数返回字段如下: 表1 pg_rm_residualfiles(filepath)返回字段 名称 类型 描述 result bool 是否已经完成删除。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles('pgrf_20200908160211441599'); result -------- t (1 row) 残留文件只有在调用pg_verify_residualfiles()进行verify后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经verify的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • pgxc_rm_residualfiles() 描述:pgxc_rm_residualfiles的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表3 pgxc_rm_residualfiles()返回字段 名称 类型 描述 nodename text 节点名。 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_rm_residualfiles(); nodename | result | filepath | notes --------------+--------+---------------------------+------- cn_5001 | t | pgrf_20200910170129360401 | dn_6001_6002 | t | pgrf_20200908160211441546 | (2 rows)
  • pg_rm_residualfiles() 描述:用于删除当前实例中所有的残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pg_rm_residualfiles()返回字段 名称 类型 描述 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles(); result | filepath | notes --------+---------------------------+------- t | pgrf_20200908160211441546 | (1 row) 残留文件只有在调用pg_verify_residualfiles()进行验证后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经验证的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • 唯一索引 GaussDB(DWS) 不支持唯一索引(约束)与主键约束联合使用。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 MySQL唯一索引(约束)与主键约束联合使用的场景在工具迁移时会与OLAP场景下的分布键构成复杂的关系。工具暂不支持唯一索引(约束)与主键约束联合使用的场景。 内联唯一索引,如存在主键索引与唯一索引是相同列,DSC工具迁移时会将唯一索引移除。 输入示例 1 2 3 4 5 6 CREATE TABLE IF NOT EXISTS `public`.`runoob_dataType_test` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(128) NOT NULL, UNIQUE (id ASC) ); 输出示例 1 2 3 4 5 6 7 8 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "id" SERIAL PRIMARY KEY, "name" VARCHAR(128) NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); ALTER TABLE创建唯一索引,DSC工具迁移时会根据GaussDB(DWS)的特性创建普通索引。 输入示例 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 CREATE TABLE IF NOT EXISTS `public`.`runoob_alter_test`( `dataType1` int, `dataType2` FLOAT(10,2), `dataType3` DOUBLE(20,8) )ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE runoob_alter_test ADD UNIQUE idx_runoob_alter_test_datatype1(dataType1); ALTER TABLE runoob_alter_test ADD UNIQUE INDEX idx_runoob_alter_test_datatype1(dataType2); ALTER TABLE runoob_alter_test ADD UNIQUE KEY idx_runoob_alter_test_datatype1(dataType3); CREATE TABLE IF NOT EXISTS `public`.`runoob_alter_test`( `dataType1` int, `dataType2` FLOAT(10,2), `dataType3` DOUBLE(20,8), `dataType4` TEXT NOT NULL, `dataType5` YEAR NOT NULL DEFAULT '2018', `dataType6` DATETIME NOT NULL DEFAULT '2018-10-12 15:27:33.999999' )ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE runoob_alter_test ADD CONSTRAINT UNIQUE idx_runoob_alter_test_datatype1(dataType1); ALTER TABLE runoob_alter_test ADD CONSTRAINT UNIQUE INDEX idx_runoob_alter_test_datatype2(dataType2); ALTER TABLE runoob_alter_test ADD CONSTRAINT UNIQUE KEY idx_runoob_alter_test_datatype3(dataType3); ALTER TABLE runoob_alter_test ADD CONSTRAINT constraint_dataType UNIQUE idx_runoob_alter_test_datatype4(dataType4); ALTER TABLE runoob_alter_test ADD CONSTRAINT constraint_dataType UNIQUE INDEX idx_runoob_alter_test_datatype5(dataType5); ALTER TABLE runoob_alter_test ADD CONSTRAINT constraint_dataType UNIQUE KEY idx_runoob_alter_test_datatype6(dataType6); 输出示例 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 CREATE TABLE IF NOT EXISTS "public"."runoob_alter_test" ( "datatype1" INTEGER, "datatype2" REAL, "datatype3" DOUBLE PRECISION ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); CREATE INDEX "idx_runoob_alter_test_datatype1" ON "public"."runoob_alter_test" ("datatype1"); CREATE INDEX "idx_runoob_alter_test_datatype1" ON "public"."runoob_alter_test" ("datatype2"); CREATE INDEX "idx_runoob_alter_test_datatype1" ON "public"."runoob_alter_test" ("datatype3"); CREATE TABLE IF NOT EXISTS "public"."runoob_alter_test" ( "datatype1" INTEGER, "datatype2" REAL, "datatype3" DOUBLE PRECISION, "datatype4" TEXT NOT NULL, "datatype5" SMALLINT NOT NULL DEFAULT '2018', "datatype6" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT '2018-10-12 15:27:33.999999' ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); CREATE INDEX "idx_runoob_alter_test_datatype1" ON "public"."runoob_alter_test" ("datatype1"); CREATE INDEX "idx_runoob_alter_test_datatype2" ON "public"."runoob_alter_test" ("datatype2"); CREATE INDEX "idx_runoob_alter_test_datatype3" ON "public"."runoob_alter_test" ("datatype3"); CREATE INDEX "idx_runoob_alter_test_datatype4" ON "public"."runoob_alter_test" ("datatype4"); CREATE INDEX "idx_runoob_alter_test_datatype5" ON "public"."runoob_alter_test" ("datatype5"); CREATE INDEX "idx_runoob_alter_test_datatype6" ON "public"."runoob_alter_test" ("datatype6"); CREATE INDEX创建唯一索引,DSC工具迁移时会根据GaussDB(DWS)的特性创建普通索引。 输入示例 1 2 3 4 5 6 7 8 9 CREATE TABLE `public`.`test_index_table01` ( `TABLE01_ID` INT(11) NOT NULL, `TABLE01_THEME` VARCHAR(100) NULL DEFAULT NULL, `AUTHOR_NAME` CHAR(10) NULL DEFAULT NULL, `AUTHOR_ID` INT(11) NULL DEFAULT NULL, `CREATE_TIME` INT NULL DEFAULT NULL, PRIMARY KEY(`TABLE01_ID`) ); CREATE UNIQUE INDEX AUTHOR_INDEX ON `test_index_table01`(AUTHOR_ID); 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE "public"."test_index_table01" ( "table01_id" INTEGER NOT NULL, "table01_theme" VARCHAR(400) DEFAULT NULL, "author_name" CHAR(40) DEFAULT NULL, "author_id" INTEGER DEFAULT NULL, "create_time" INTEGER DEFAULT NULL, PRIMARY KEY ("table01_id") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("table01_id"); CREATE INDEX "author_index" ON "public"."test_index_table01" ("author_id"); CREATE TABLE中存在多个唯一索引,DSC工具迁移时会根据GaussDB(DWS)的特性将所有唯一索引创建为普通索引。 输入示例 1 2 3 4 5 6 7 8 9 CREATE TABLE `public`.`test_index_table01` ( `TABLE01_ID` INT(11) NOT NULL, `TABLE01_THEME` VARCHAR(100) NULL DEFAULT NULL, `AUTHOR_NAME` CHAR(10) NULL DEFAULT NULL, `AUTHOR_ID` INT(11) NULL DEFAULT NULL, `CREATE_TIME` INT NULL DEFAULT NULL, UNIQUE(`TABLE01_ID`), UNIQUE(`AUTHOR_ID`) ); 输出示例 1 2 3 4 5 6 7 8 9 CREATE TABLE "public"."test_index_table01" ( "table01_id" INTEGER NOT NULL, "table01_theme" VARCHAR(400) DEFAULT NULL, "author_name" CHAR(40) DEFAULT NULL, "author_id" INTEGER DEFAULT NULL, "create_time" INTEGER DEFAULT NULL ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("table01_id"); CREATE INDEX "idx_test_index_table01_table01_id" ON "public"."test_index_table01"("TABLE01_ID"); CREATE INDEX "idx_test_index_table01_author_id" ON "public"."test_index_table01"("AUTHOR_ID"); CREATE TABLE中存在一个唯一索引,并不存在主键索引时,DSC工具迁移时会根据GaussDB(DWS)的特性保留该唯一索引。 输入示例 1 2 3 4 5 6 7 8 CREATE TABLE `public`.`test_index_table01` ( `TABLE01_ID` INT(11) NOT NULL, `TABLE01_THEME` VARCHAR(100) NULL DEFAULT NULL, `AUTHOR_NAME` CHAR(10) NULL DEFAULT NULL, `AUTHOR_ID` INT(11) NULL DEFAULT NULL, `CREATE_TIME` INT NULL DEFAULT NULL, UNIQUE(`AUTHOR_ID`) ); 输出示例 1 2 3 4 5 6 7 8 CREATE TABLE "public"."test_index_table01" ( "table01_id" INTEGER NOT NULL, "table01_theme" VARCHAR(400) DEFAULT NULL, "author_name" CHAR(40) DEFAULT NULL, "author_id" INTEGER DEFAULT NULL, "create_time" INTEGER DEFAULT NULL, UNIQUE ("author_id") ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("author_id"); CREATE TABLE中存在主键索引时,DSC工具迁移时会根据GaussDB(DWS)的特性将所有的唯一索引创建为普通索引。 输入示例 1 2 3 4 5 6 7 8 9 CREATE TABLE `public`.`test_index_table01` ( `TABLE01_ID` INT(11) NOT NULL, `TABLE01_THEME` VARCHAR(100) NULL DEFAULT NULL, `AUTHOR_NAME` CHAR(10) NULL DEFAULT NULL, `AUTHOR_ID` INT(11) NULL DEFAULT NULL, `CREATE_TIME` INT NULL DEFAULT NULL, PRIMARY KEY(`TABLE01_ID`), UNIQUE(`AUTHOR_ID`) ); 输出示例 1 2 3 4 5 6 7 8 9 CREATE TABLE "public"."test_index_table01" ( "table01_id" INTEGER NOT NULL, "table01_theme" VARCHAR(400) DEFAULT NULL, "author_name" CHAR(40) DEFAULT NULL, "author_id" INTEGER DEFAULT NULL, "create_time" INTEGER DEFAULT NULL, PRIMARY KEY ("table01_id") ) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("table01_id"); CREATE INDEX "idx_test_index_table01_author_id" ON "public"."test_index_table01"("AUTHOR_ID"); 父主题: 索引
  • 搜索表 在不使用索引的情况下也可以进行全文检索。 一个简单查询:将body字段中包含science的每一行打印出来。 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 DROP SCHEMA IF EXISTS tsearch CASCADE; CREATE SCHEMA tsearch; CREATE TABLE tsearch.pgweb(id int, body text, title text, last_mod_date date); INSERT INTO tsearch.pgweb VALUES(1, 'Philology is the study of words, especially the history and development of the words in a particular language or group of languages.', 'Philology', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(2, 'Mathematics is the science that deals with the logic of shape, quantity and arrangement.', 'Mathematics', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(3, 'Computer science is the study of processes that interact with data and that can be represented as data in the form of programs.', 'Computer science', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(4, 'Chemistry is the scientific discipline involved with elements and compounds composed of atoms, molecules and ions.', 'Chemistry', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(5, 'Geography is a field of science devoted to the study of the lands, features, inhabitants, and phenomena of the Earth and planets.', 'Geography', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(6, 'History is a subject studied in schools, colleges, and universities that deals with events that have happened in the past.', 'History', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(7, 'Medical science is the science of dealing with the maintenance of health and the prevention and treatment of disease.', 'Medical science', '2010-1-1'); INSERT INTO tsearch.pgweb VALUES(8, 'Physics is one of the most fundamental scientific disciplines, and its main goal is to understand how the universe behaves.', 'Physics', '2010-1-1'); SELECT id, body, title FROM tsearch.pgweb WHERE to_tsvector('english', body) @@ to_tsquery('english', 'science'); id | body | title ----+-------------------------------------------------------------------------------------------------------------------------+--------- 2 | Mathematics is the science that deals with the logic of shape, quantity and arrangement. | Mathematics 3 | Computer science is the study of processes that interact with data and that can be represented as data in the form of programs. | Computer science 5 | Geography is a field of science devoted to the study of the lands, features, inhabitants, and phenomena of the Earth and planets. | Geography 7 | Medical science is the science of dealing with the maintenance of health and the prevention and treatment of disease. | Medical science (4 rows) 像science这样的相关词也会被找到,因为这些词都被处理成了相同标准的词条。 上面的查询指定english配置来解析和规范化字符串。也可以省略此配置,通过default_text_search_config进行配置设置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SHOW default_text_search_config; default_text_search_config ---------------------------- pg_catalog.english (1 row) SELECT id, body, title FROM tsearch.pgweb WHERE to_tsvector(body) @@ to_tsquery('science'); id | body | title ----+-------------------------------------------------------------------------------------------------------------------------+--------- 2 | Mathematics is the science that deals with the logic of shape, quantity and arrangement. | Mathematics 3 | Computer science is the study of processes that interact with data and that can be represented as data in the form of programs. | Computer science 5 | Geography is a field of science devoted to the study of the lands, features, inhabitants, and phenomena of the Earth and planets. | Geography 7 | Medical science is the science of dealing with the maintenance of health and the prevention and treatment of disease. | Medical science (4 rows) 一个复杂查询:检索出在title或者body字段中包含treatment和science的最近10篇文档: 1 2 3 4 5 6 7 SELECT title FROM tsearch.pgweb WHERE to_tsvector(title || ' ' || body) @@ to_tsquery('treatment & science') ORDER BY last_mod_date DESC LIMIT 10; title -------- Medical science (1 rows) 为了清晰,举例中没有调用coalesce函数在两个字段中查找包含NULL的行。 以上例子均在没有索引的情况下进行查询。对于大多数应用程序来说,这个方法很慢。因此除了偶尔的特定搜索,文本搜索在实际使用中通常需要创建索引。 父主题: 表和索引
  • 操作步骤 连接数据库时,可以使用如下命令获取帮助信息。 gsql --help 显示如下帮助信息: ...... Usage: gsql [OPTION]... [DBNAME [USERNAME]] General options: -c, --command=COMMAND run only single command (SQL or internal) and exit -d, --dbname=DBNAME database name to connect to (default: "postgres") -f, --file=FILENAME execute commands from file, then exit ...... 连接到数据库后,可以使用如下命令获取帮助信息。 help 显示如下帮助信息: You are using gsql, the command-line interface to gaussdb. Type: \copyright for distribution terms \h for help with SQL commands \? for help with gsql commands \g or terminate with semicolon to execute query \q to quit
  • 任务示例 查看gsql的帮助信息。具体执行命令请参见表1。 表1 使用gsql联机帮助 描述 示例 查看版权信息 \copyright 查看GaussDB(DWS)支持的SQL语句的帮助 查看GaussDB(DWS)支持的SQL语句的帮助 例如,查看GaussDB(DWS)支持的所有SQL语句: 1 2 3 4 5 6 \h Available help: ABORT ALTER DATABAE ALTER DATA SOURCE ... ... 例如,查看CREATE DATABASE命令的参数可使用下面的命令: 1 2 3 4 5 6 7 8 9 10 11 12 13 \help CREATE DATABASE Command: CREATE DATABASE Description: create a new database Syntax: CREATE DATABASE database_name [ [ WITH ] {[ OWNER [=] user_name ]| [ TEMPLATE [=] template ]| [ ENCODING [=] encoding ]| [ LC_COLLATE [=] lc_collate ]| [ LC_CTYPE [=] lc_ctype ]| [ DBCOMPATIBILITY [=] compatibility_type ]| [ TABLESPACE [=] tablespace_name ]| [ CONNECTION LIMIT [=] connlimit ]}[...] ]; 查看gsql命令的帮助 例如,查看gsql支持的命令: 1 2 3 4 5 6 7 \? General \copyright show PostgreSQL usage and distribution terms \g [FILE] or ; execute query (and send results to file or |pipe) \h(\help) [NAME] help on syntax of SQL commands, * for all commands \q quit gsql ... ...
  • 参数说明 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优。 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。ON关联条件可以是ctid, xc_node_id, tableoid这三个系统列。 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条件中引用系统列。
  • 示例 创建目标表products和源表newproducts,并插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE products ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); INSERT INTO products VALUES (1600, 'play gym', 'toys'); INSERT INTO products VALUES (1601, 'lamaze', 'toys'); INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); CREATE TABLE newproducts ( product_id INTEGER, product_name VARCHAR2(60), category VARCHAR2(60) ); INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); 进行MERGE INTO操作: 1 2 3 4 5 6 7 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'; 查询更新后的结果: 1 2 3 4 5 6 7 8 9 10 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) 删除表: 1 2 DROP TABLE products; 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 | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ];
  • 注意事项 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 不支持PREPARE。 不支持重分布过程中MERGE INTO。 不支持对包含触发器的目标表执行MERGE INTO。 对roundrobin表执行MERGE INTO时,推荐关闭GUC参数allow_concurrent_tuple_update,否则会不支持部分MERGE INTO语句。
  • COMMENT 在MySQL中,COMMENT对表进行注释。GaussDB(DWS)支持该属性修改表定义信息,DSC工具迁移时会添加额外的表属性信息。 输入示例 1 2 3 4 5 6 7 8 CREATE TABLE `public`.`runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` FLOAT(10,2) COMMENT 'dataType2列', PRIMARY KEY(`dataType1`) ) comment='表的注释'; ALTER TABLE `public`.`runoob_alter_test` COMMENT '修改后的表的注释'; ALTER TABLE `public`.`runoob_alter_test` ADD INDEX age_index(dataType2) COMMENT '索引'; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" REAL COMMENT 'dataType2列', PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1") COMMENT '表的注释'; ALTER TABLE "public"."runoob_alter_test" COMMENT '修改后的表的注释'; CREATE INDEX "age_index" ON "public"."runoob_alter_test" ("dataType2") COMMENT '索引'; 父主题: 表(可选参数、操作)
共100000条