华为云用户手册

  • 注意事项 在指定ANALYZE选项时,语句会被执行。如果用户想使用EXPLAIN分析INSERT,UPDATE,DELETE,CREATE TABLE AS或EXECUTE语句,而不想改动数据(执行这些语句会影响数据),请使用如下方法。 START TRANSACTION; EXPLAIN ANALYZE ...; ROLLBACK; 由于参数DETAIL,NODES,NUM_NODES是分布式模式下的功能,在单机模式中是被禁止使用的。假如使用,会产生如下错误。 openGauss=# create table student(id int, name char(20)); CREATE TABLE openGauss=# explain (nodes true) insert into student values(5,'a'),(6,'b'); ERROR: unrecognized EXPLAIN option "nodes" openGauss=# explain (num_nodes true) insert into student values(5,'a'),(6,'b'); ERROR: unrecognized EXPLAIN option "num_nodes"
  • 语法格式 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求。 EXPLAIN [ ( option [, ...] ) ] statement; 其中选项option子句的语法为。 ANALYZE [ boolean ] | ANALYSE [ boolean ] | VERBOSE [ boolean ] | COSTS [ boolean ] | CPU [ boolean ] | DETAIL [ boolean ] |(仅分布式模式可用,集中式模式不可用) NODES [ boolean ] |(仅分布式模式可用,集中式模式不可用) NUM_NODES [ boolean ] |(仅分布式模式可用,集中式模式不可用) BUFFERS [ boolean ] | TIMING [ boolean ] | PLAN [ boolean ] | FORMAT { TEXT | XML | JSON | YAML } 显示SQL语句的执行计划,且要按顺序给出选项。 EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement;
  • 示例 --创建表reason。 openGauss=# CREATE TABLE tpcds.reason ( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER character(16) , CD_MARITAL_STATUS character(100) ) ; --插入数据。 openGauss=# INSERT INTO tpcds.reason VALUES(51, 'AAAAAAAADDAAAAAA', 'reason 51'); --创建表reason_t1。 openGauss=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; --为一个INSERT语句创建一个预备语句然后执行它。 openGauss=# PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); openGauss=# EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52'); --删除表reason和reason_t1。 openGauss=# DROP TABLE tpcds.reason; openGauss=# DROP TABLE tpcds.reason_t1;
  • 注意事项 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的进程被杀死。 在 GaussDB 中,存在一个配置参数enable_kill_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即drop user不支持跨数据库进行级联删除。 在删除用户时,需要先删除该用户拥有的所有对象并且收回该用户在其他对象上的权限,或者通过指定CASCADE级联删除该用户拥有的对象和被授予的权限。 如果该用户被DATA SOURCE对象依赖时,无法直接级联删除该用户,需要手动删除对应的DATA SOURCE对象之后再删除该用户。
  • 参数说明 IF EXISTS 如果指定的用户不存在,发出一个notice而不是抛出一个错误。 user_name 待删除的用户名。 取值范围:已存在的用户名。 CASCADE | RESTRICT CASCADE:级联删除依赖用户的对象,并收回授予该用户的权限。 RESTRICT:如果用户还有任何依赖的对象或被授予了其他对象的权限,则拒绝删除该用户(缺省行为)。 在GaussDB中,存在一个配置参数enable_kill_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。
  • 参数说明 IF EXISTS 如果指定的触发器不存在,则发出一个notice而不是抛出一个错误。 trigger_name 要删除的触发器名称。 取值范围:已存在的触发器。 table_name 要删除的触发器所在的表名称。 取值范围:已存在的含触发器的表。 CASCADE | RESTRICT CASCADE:级联删除依赖此触发器的对象。 RESTRICT:如果有依赖对象存在,则拒绝删除此触发器。此选项为缺省值。
  • 参数说明 IF EXISTS 如果指定的全文检索词典不存在,那么发出一个Notice而不是报错。 name 要删除的词典名称(可指定模式名,否则默认在当前模式下)。 取值范围:已存在的词典名。 CASCADE 自动删除依赖于该词典的对象,并依次删除依赖于这些对象的所有对象。 如果存在任何一个使用该词典的文本搜索配置,此DROP命令将不会成功。可添加CASCADE以删除引用该词典的所有文本搜索配置以及词典。 RESTRICT 如果任何对象依赖词典,则拒绝删除该词典。这是缺省值。
  • 注意事项 只有表空间所有者或者被授予了表空间DROP权限的用户有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。 在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。 DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。 执行DROP TABLESPACE操作时,如果有另外的会话执行\db查询操作,可能会由于tablespace事务的原因导致查询失败,请重新执行\db查询操作。 如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。
  • 参数说明 IF EXISTS 如果指定的表不存在,则发出一个notice而不是抛出一个错误。 schema 模式名称。 table_name 表名称。 CASCADE | RESTRICT CASCADE:级联删除依赖于表的对象(比如视图)。 RESTRICT(缺省项):如果存在依赖对象,则拒绝删除该表。这个是缺省。 PURGE 该参数表示即使开启回收站功能,drop表时,也会直接物理删除表,而不是将其放入回收站中。
  • 参数说明 IF EXISTS 如果指定的模式不存在,发出一个notice而不是抛出一个错误。 schema_name 模式的名称。 取值范围:已存在模式名。 CASCADE | RESTRICT CASCADE:自动删除包含在模式中的对象。 RESTRICT:如果模式包含任何对象,则删除失败(缺省行为)。 不要随意删除pg_temp或pg_toast_temp开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。 无法删除当前模式。如果要删除当前模式,须切换到其他模式下。
  • 示例 --创建数据表all_data openGauss=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); --创建行访问控制策略 openGauss=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); --删除行访问控制策略 openGauss=# DROP ROW LEVEL SECURITY POLICY all_data_rls ON all_data;
  • 参数说明 CONCURRENTLY 以不加锁的方式删除索引。删除索引时,一般会阻塞其他语句对该索引所依赖表的访问。加此关键字,可实现删除过程中不做阻塞。 此选项只能指定一个索引的名称, 并且CASCADE选项不支持。 普通DROP INDEX命令可以在事务内执行,但是DROP INDEX CONCURRENTLY不可以在事务内执行。 IF EXISTS 如果指定的索引不存在,则发出一个notice而不是抛出一个错误。 index_name 要删除的索引名。 取值范围:已存在的索引。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于该索引的对象。 RESTRICT(缺省值):表示有依赖与此索引的对象存在,则该索引无法被删除。
  • 注意事项 当enable_access_server_directory=off时,只允许初始用户删除directory对象;当enable_access_server_directory=on时,具有SYSADMIN权限的用户、directory对象的属主、被授予了该directory的DROP权限的用户或者继承了内置角色gs_role_directory_drop权限的用户可以删除directory对象。
  • 参数说明 src_name 待删除的Data Source对象名称。 取值范围:字符串,符合标识符命名规范。 IF EXISTS 如果指定的Data Source不存在,则发出一个notice而不是报错。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于Data Source的对象 RESTRICT(缺省值):表示有依赖于该Data Source的对象存在,则该Data Source无法删除。 目前Data Source对象没有被依赖的对象,CASCADE和RESTRICT效果一样,保留此选项是为了向后兼容性。
  • 注意事项 只有数据库所有者或者被授予了数据库DROP权限的用户有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 不能对系统默认安装的三个数据库(POSTGRES、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\l命令查看。 如果有用户正在与要删除的数据库连接,则删除操作失败。 不能在事务块中执行DROP DATABASE命令。 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 DROP DATABASE一旦执行将无法撤销,请谨慎使用。
  • 示例 1 2 3 4 --删除列加密密钥。 openGauss=# DROP COLUMN ENCRYPTION KEY ImgCEK CASCADE; ERROR: cannot drop column setting: imgcek cascadely because encrypted column depend on it. HINT: we have to drop encrypted column: name, ... before drop column setting: imgcek cascadely.
  • 示例 --创建用户webuser。 openGauss=# CREATE USER webuser PASSWORD 'xxxxxxxxx'; --授予用户webuser对模式tpcds下视图的所有操作权限。 openGauss=# DO $$DECLARE r record; BEGIN FOR r IN SELECT c.relname table_name,n.nspname table_schema FROM pg_class c,pg_namespace n WHERE c.relnamespace = n.oid AND n.nspname = 'tpcds' AND relkind IN ('r','v') LOOP EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser'; END LOOP; END$$; --删除用户webuser。 openGauss=# DROP USER webuser CASCADE;
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {select | values | insert | update | delete} ) – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问 子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 – 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 plan_hint子句 以/*+ */的形式在DELETE关键字后,用于对DELETE对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 table_name 目标表的名称(可以有模式修饰)。 取值范围:已存在的表名。 partition_clause 指定分区删除操作 PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } | SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } 关键字详见SELECT一节介绍 示例详见CREATE TABLE SUBPARTITION alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 using_list using子句。 condition 一个返回Boolean值的表达式,用于判断哪些行需要被删除。不建议使用int等数值类型作为condition,因为int等数值类型可以隐式转换为bool值(非0值隐式转换为true,0转换为false),可能导致非预期的结果。 WHERE CURRENT OF cursor_name 当前不支持,仅保留语法接口。 LIMIT子句 关键字详见SELECT一节介绍 output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 output_name 一个字段的输出名称。 取值范围:字符串,符合标识符命名规范。
  • 语法格式 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] [FROM] [ ONLY ] table_name [partition_clause] [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ LIMIT { count } ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 WITH HOLD WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。 declare_statements 声明变量,包括变量名和变量类型,如“sales_cnt int”。 execution_statements 匿名块中要执行的语句。 取值范围:已存在的函数名称。
  • 功能描述 DECLARE命令既可以定义一个游标,用于在一个大的查询里面检索少数几行数据,也可以作为一个匿名块的开始。 本节主要描述定义为游标的用法,开启匿名块的用法见BEGIN。 为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。
  • 注意事项 游标命令只能在事务块里使用。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。 应该小心使用二进制游标。文本格式一般都比对应的二进制格式占用的存储空间大。二进制游标返回内部二进制形态的数据,可能更易于操作。如果想以文本方式显示数据,则以文本方式检索会为用户节约很多客户端的工作。比如,如果查询从某个整数列返回1,在缺省的游标里将获得一个字符串1,但在二进制游标里将得到一个4字节的包含该数值内部形式的数值(大端顺序)。
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 WITH HOLD | WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 跨节点事务不支持WITH HOLD(例如在多DBnode部署数据库中所创建的含有DDL的事务属于跨节点事务)。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。
  • 示例 --向gs_global_config系统表中插入单个弱口令。 openGauss=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password1'); --向gs_global_config系统表中插入多个弱口令。 openGauss=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password2'),('password3'); --清空gs_global_config系统表中所有弱口令。 openGauss=# DROP WEAK PASSWORD DICTIONARY; --查看现有弱口令。 openGauss=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password';
  • 语法格式 CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ] [ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ] AS query; 创建视图时使用WITH(security_barrier)可以创建一个相对安全的视图,避免攻击者利用低成本函数的RAISE语句打印出隐藏的基表数据。 当视图创建后,不允许使用REPLACE修改本视图当中的列名,也不允许删除列。
  • 参数说明 OR REPLACE 如果视图已存在,则重新定义。 TEMP | TEMPORARY 创建临时视图。 view_name 要创建的视图名称。可以用模式修饰。 取值范围:字符串,符合标识符命名规范。 column_name 可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。 取值范围:字符串,符合标识符命名规范。 view_option_name [= view_option_value] 该子句为视图指定一个可选的参数。 目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。 取值范围:Boolean类型,TRUE、FALSE query 为视图提供行和列的SELECT或VALUES语句。 若query包含指定分区表分区的子句,创建视图会将所指定分区的OID硬编码到系统表中。如果使用导致指定分区的OID发生变更的分区DDL语法,如DROP/SPLIT/MERGE该分区,则会导致视图不可用。需要重新创建视图。
  • 示例 --创建字段spcname为pg_default组成的视图。 openGauss=# CREATE VIEW myView AS SELECT * FROM pg_tablespace WHERE spcname = 'pg_default'; --查看视图。 openGauss=# SELECT * FROM myView ; --删除视图myView。 openGauss=# DROP VIEW myView;
  • 注意事项 当在OPTIONS中出现password选项时,需要保证GaussDB每个节点的$GAUSSHOME/bin目录下存在usermapping.key.cipher和usermapping.key.rand文件,如果不存在这两个文件,请使用gs\_guc工具生成并使用gs\_ssh工具发布到GaussDB每个节点的$GAUSSHOME/bin目录下。 OPTIONS中的敏感字段(如passowrd)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
  • 参数说明 user_name 要映射到外部服务器的一个现有用户的名称。 CURRENT_USER和USER匹配当前用户的名称。 当PUBLIC被指定时,一个公共映射会被创建,当没有特定用户的映射可用时将会使用它。 server_name 将为其创建用户映射的现有服务器的名称。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句指定用户映射的选项。这些选项通常定义该映射实际的用户名和口令。选项名必须唯一。允许的选项名和值与该服务器的外部数据包装器有关。 用户的口令会加密后保存到系统表PG_USER_MAPPING中,加密时需要使用usermapping.key.cipher和usermapping.key.rand作为加密密码文件和加密因子。首次使用前需要通过如下命令创建这两个文件,并将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入各节点对应目录下。 gs_ssh -c "gs_guc generate -o usermapping -S default -D $GAUSSHOME/bin" 其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。其他参数详见工具参考中gs_guc工具说明。
  • 语法格式 CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [EXPIRED] | DISABLE }; 其中option子句用于设置权限及属性等信息。 {SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | { LOG IN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
共100000条