华为云用户手册

  • 注意事项 如果游标定义了NO SCROLL,则不允许使用例如FETCH BACKWARD之类的反向抓取。 NEXT,PRIOR,FIRST,LAST,ABSOLUTE,RELATIVE形式在恰当地移动游标之后抓取一条记录。如果后面没有数据行,就返回一个空的结果,此时游标就会停在查询结果的最后一行之后(向后查询时)或者第一行之前(向前查询时)。 FORWARD和BACKWARD形式在向前或者向后移动的过程中抓取指定的行数,然后把游标定位在最后返回的行上;或者,如果count大于可用的行数,则在所有行之后(向后查询时)或者之前(向前查询时)。 RELATIVE 0,FORWARD 0,BACKWARD 0都要求在不移动游标的前提下抓取当前行,也就是重新抓取最近刚抓取过的行。除非游标定位在第一行之前或者最后一行之后,否则这个动作都应该成功。而当游标定位在第一行之前或者最后一行之后,不返回任何行。
  • 语法格式 FETCH [ direction { FROM | IN } ] cursor_name; 其中direction子句为可选参数。 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 功能描述 FETCH通过已创建的游标来检索数据。 每个游标都有一个供FETCH使用的关联位置。游标的关联位置可以在查询结果的第一行之前,或者在结果中的任意行,或者在结果的最后一行之后: 游标刚创建完之后,关联位置在第一行之前。 在抓取了一些移动行之后,关联位置在检索到的最后一行上。 如果FETCH抓取完了所有可用行,它就停在最后一行后面,或者在反向抓取的情况下是停在第一行前面。 FETCH ALL或FETCH BACKWARD ALL总是把游标的关联位置放在最后一行或者在第一行前面。
  • 参数说明 EXPLAIN PLAN 其中的PLAN选项表示需要将计划信息存储于PLAN_TABLE中,存储成功将返回“EXPLAIN SUC CES S”。 STATEMENT_ID 用户可通过STATEMENT_ID对查询设置标签,输入的标签信息也将存储于PLAN_TABLE中。 name 查询标签。 取值范围:字符串 用户在执行EXPLAIN PLAN时,如果没有设置STATEMENT_ID,则默认为空值。同时,用户可输入的STATEMENT_ID最大长度为30个字节,超过长度将会产生报错。
  • 功能描述 显示SQL语句的执行计划。 执行计划将显示SQL语句所引用的表会采用什么样的扫描方式,如:简单的顺序扫描、索引扫描等。如果引用了多个表,执行计划还会显示用到的JOIN算法。 执行计划的最关键的部分是语句的预计执行开销,是指计划生成器估算执行该语句将花费多长的时间。 若指定了ANALYZE选项,则该语句会被执行,然后根据实际的运行结果显示统计数据,包括每个计划节点内时间总开销(毫秒为单位)和实际返回的总行数。这对于判断计划生成器的估计值是否接近实际非常有用。
  • 参数说明 statement 指定要分析的SQL语句。 ANALYZE boolean | ANALYSE boolean 显示实际运行时间和其他统计数据。当两个参数同时使用时,在option中排在后面的一个生效。 取值范围: TRUE(缺省值):显示实际运行时间和其他统计数据。 FALSE:不显示。 VERBOSE boolean 显示有关计划的额外信息。 取值范围: TRUE(缺省值):显示额外信息。 FALSE:不显示。 COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 取值范围: TRUE(缺省值):显示估计总成本和宽度。 FALSE:不显示。 CPU boolean 打印CPU的使用情况的信息。 取值范围: TRUE(缺省值):显示CPU的使用情况。 FALSE:不显示。 DETAIL boolean 打印数据库节点上的信息。 取值范围: TRUE(缺省值):打印数据库节点的信息。 FALSE:不打印。 BUFFERS boolean 包括缓冲区的使用情况的信息。需要结合ANALYZE或ANALYSE选项一起使用。 取值范围: TRUE:显示缓冲区的使用情况。 FALSE(缺省值):不显示。 TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。需要结合ANALYZE或ANALYSE选项一起使用。 取值范围: TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。 FALSE:不显示。 PLAN boolean 是否将执行计划存储在PLAN_TABLE中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 取值范围: ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。 OFF:不存储执行计划,将执行计划打印到当前屏幕。 BLOCKNAME boolean 是否显示计划的每个操作所处于的查询块。当该选项开启时,会将每个操作所处于的查询块的名字输出在Query Block列上,方便用户获取查询块名字,并使用Hint修改执行计划: TRUE(缺省值):显示计划时,将每个操作所处于的查询块的名字输出在新增列Query Block列上。该选项需要在pretty 模式下使用。见指定Hint所处于的查询块Queryblock。 FALSE:不对计划显示产生影响。 FORMAT 指定输出格式。 取值范围:TEXT,XML,JSON和YAML。 默认值:TEXT。 PERFORMANCE 使用此选项时,即打印执行中的所有相关信息。下述为部分信息描述: ex c/r:代表平均每行使用cpu周期数,等于(ex cyc)/(ex row)。 ex row:执行行数。 ex cyc:代表使用的cpu周期数。 inc cyc:代表包含子节点使用的总cpu周期数。 shared hit:代表算子的share buffer命中情况。 loops:算子循环执行次数。 total_calls:生成元素总数。 remote query poll time stream gather:算子用于侦听各DN数据到达CN的网络poll时间。 deserialize time:反序列化所需时间。 estimated time:估计时间。 OPTEVAL boolean 是否显示SCAN算子(当前仅支持seqscan、indexscan、indexonlyscan、bitmapheapscan)的代价淘汰明细,当开启此开关的时候,会在执行计划中显示一个名字为Cost Evaluation Info (identified by plan id)的计划块,该选项仅仅可以和costs、verbose、format三个选项共存。此计划块中的具体参数明细,请参考示例2。 取值范围: TRUE:显示SCAN算子的代价淘汰明细。 FALSE(缺省值):不显示。
  • 语法格式 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求。 EXPLAIN [ ( option [, ...] ) ] statement; 其中选项option子句的语法为。 ANALYZE [ boolean ] | ANALYSE [ boolean ] | VERBOSE [ boolean ] | COSTS [ boolean ] | CPU [ boolean ] | DETAIL [ boolean ] | BUFFERS [ boolean ] | TIMING [ boolean ] | PLAN [ boolean ] | BLOCKNAME [ boolean ] | FORMAT { TEXT | XML | JSON | YAML } OPTEVAL [ boolean ] 显示SQL语句的执行计划,且要按顺序给出选项。 EXPLAIN { [ ANALYZE | ANALYSE ] [ VERBOSE ] | PERFORMANCE } statement;
  • 示例 --创建SCHEMA。 gaussdb=# CREATE SCHEMA tpcds; --创建表reason。 gaussdb=# CREATE TABLE tpcds.reason ( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER character(16) , CD_MARITAL_STATUS character(100) ) ; --插入数据。 gaussdb=# INSERT INTO tpcds.reason VALUES(51, 'AAAAAAAADDAAAAAA', 'reason 51'); --创建表reason_t1。 gaussdb=# CREATE TABLE tpcds.reason_t1 AS TABLE tpcds.reason; --为一个INSERT语句创建一个预备语句然后执行它。 gaussdb=# PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO tpcds.reason_t1 VALUES($1,$2,$3); gaussdb=# EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52'); --删除表reason和reason_t1。 gaussdb=# DROP TABLE tpcds.reason; gaussdb=# DROP TABLE tpcds.reason_t1; --删除SCHEMA。 gaussdb=# DROP SCHEMA tpcds CASCADE;
  • 参数说明 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模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。
  • 注意事项 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的进程被杀死。 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即DROP USER不支持跨数据库进行级联删除。 在删除用户时,需要先删除该用户拥有的所有对象并且收回该用户在其他对象上的权限,或者通过指定CASCADE级联删除该用户拥有的对象和被授予的权限。
  • 参数说明 IF EXISTS 如果指定的触发器不存在,则发出一个notice而不是抛出一个错误。 trigger_name 要删除的触发器名称。 取值范围:已存在的触发器。 table_name 要删除的触发器所在的表名称。 取值范围:已存在的含触发器的表。 CASCADE | RESTRICT CASCADE:级联删除依赖此触发器的对象。 RESTRICT:如果有依赖对象存在,则拒绝删除此触发器。此选项为缺省值。
  • 注意事项 只有表空间所有者或者被授予了表空间DROP权限的用户有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。 在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。 DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。 执行DROP TABLESPACE操作时,如果有另外的会话执行\db查询操作,可能会由于TABLESPACE事务的原因导致查询失败,请重新执行\db查询操作。 如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。
  • 参数说明 IF EXISTS 如果指定的表不存在,则发出一个notice而不是抛出一个error。 schema 模式名称。 table_name 表名称。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于该表的对象(比如视图)。 RESTRICT:表示有依赖于该表的对象存在时,该索引无法被删除。此选项为缺省值。 PURGE 该参数表示即使开启回收站功能,使用DROP TABLE删除表时,也会直接物理删除表,而不是将其放入回收站中。
  • 注意事项 DROP TABLE删除表后,依赖该表的索引会被删除,而使用到该表的函数和存储过程将无法执行。删除分区表,会同时删除分区表中的所有分区。 表的所有者、表所在模式的所有者、被授予了表的DROP权限的用户或被授予DROP ANY TABLE权限的用户,有权删除指定表,系统管理员默认拥有该权限。 DROP TABLE时,如果被指删除的表作为外键表引用了另一张表,会级联删除被引用表上的触发器,此时需要对被引用表加八级锁,可能造成业务的阻塞。
  • 参数说明 IF EXISTS 如果指定的模式不存在,发出一个notice而不是抛出一个错误。 schema_name 模式的名称。 取值范围:已存在模式名。 CASCADE | RESTRICT CASCADE:自动删除包含在模式中的对象。 RESTRICT:如果模式包含任何对象,则删除失败(缺省行为)。 不要随意删除pg_temp或pg_toast_temp开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。 无法删除当前模式。如果要删除当前模式,须切换到其他模式下。
  • 示例 --创建表def_test、视图def_view_test用于创建RULE gaussdb=# CREATE TABLE def_test ( c1 int4 DEFAULT 5, c2 text DEFAULT 'initial_default' ); gaussdb=# CREATE VIEW def_view_test AS SELECT * FROM def_test; --创建RULE def_view_test_ins gaussdb=# CREATE RULE def_view_test_ins AS gaussdb=# ON INSERT TO def_view_test gaussdb=#DO INSTEAD INSERT INTO def_test SELECT new.*; --删除RULE def_view_test_ins gaussdb=# DROP RULE def_view_test_ins ON def_view_test; --删除表def_test、视图def_view_test gaussdb=# DROP VIEW def_view_test; gaussdb=# DROP TABLE def_test;
  • 示例 --创建数据表all_data。 gaussdb=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); --创建行访问控制策略。 gaussdb=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); --删除行访问控制策略。 gaussdb=# DROP ROW LEVEL SECURITY POLICY all_data_rls ON all_data; --删除数据表all_data。 gaussdb=# DROP TABLE all_data;
  • 注意事项 所有该角色在当前数据库里和共享对象(数据库,表空间) 上的所有对象上的权限都将被撤销。 DROP OWNED常常被用来为移除一个或者多个角色做准备。因为DROP OWNED只影响当前数据库中的对象,通常需要在包含将被移除角色所拥有的对象的每一个数据库中都执行这个命令。 使用CASCADE选项可能导致这个命令递归去删除由其他用户所拥有的对象。 角色所拥有的数据库、表空间将不会被移除。 角色所拥有的私有DATABASE LINK连接需要添加CASCADE才可删除。
  • 示例 --创建表。 gaussdb=# CREATE TABLE my_table (c1 int, c2 int) WITH(STORAGE_TYPE=ASTORE); --创建名为my_mv的物化视图。 gaussdb=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table; --删除名为my_mv的物化视图。 gaussdb=# DROP MATERIALIZED VIEW my_mv; --删除表。 gaussdb=# DROP TABLE my_table;
  • 参数说明 CONCURRENTLY 以不加锁的方式删除索引。删除索引时,一般会阻塞其他语句对该索引所依赖表的访问。加此关键字,可在删除过程中避免阻塞。 此选项只能指定一个索引的名称, 并且不支持CASCADE选项。 普通DROP INDEX命令可以在事务内执行,但是DROP INDEX CONCURRENTLY不可以在事务内执行。 IF EXISTS 如果指定的索引不存在,则发出一个notice而不是抛出一个错误。 index_name 要删除的索引名。 取值范围:已存在的索引。 CASCADE | RESTRICT CASCADE:表示允许级联删除依赖于该索引的对象。 RESTRICT:表示有依赖于此索引的对象存在时,该索引无法被删除。此选项为缺省值。
  • 参数说明 IF EXISTS IF EXISTS表示,如果函数存在则执行删除操作,函数不存在也不会报错,只是发出一个notice。 function_name 要删除的函数名称。 取值范围:已存在的函数名。 argmode 函数参数的模式。 argname 函数参数的名称。 argtype 函数参数的类型 CASCADE | RESTRICT CASCADE:级联删除依赖于函数的对象 。 RESTRICT:如果有任何依赖对象存在,则拒绝删除该函数(缺省行为)。
  • 注意事项 当enable_access_server_directory=off时,只允许初始用户删除directory对象。 当enable_access_server_directory=on时,具有SYSADMIN权限的用户、directory对象的属主、被授予了该directory的DROP权限的用户或者继承了内置角色gs_role_directory_drop权限的用户可以删除directory对象。
  • 注意事项 只有数据库所有者或者被授予了数据库DROP权限的用户有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 不能对系统默认安装的三个数据库(POSTGRES、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\l命令查看。 如果有用户正在与要删除的数据库连接,则删除操作失败。 不能在事务块中执行DROP DATABASE命令。 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 DROP DATABASE一旦执行将无法撤销,请谨慎使用。
  • 示例 1 2 3 4 --删除列加密密钥。 gaussdb=# 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。 gaussdb=# CREATE USER webuser PASSWORD '********'; --授予用户webuser对模式tpcds下视图的所有操作权限。 gaussdb=# 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。 gaussdb=# DROP USER webuser CASCADE;
  • 功能描述 DECLARE命令既可以定义一个游标,用于在一个大的查询里面检索少数几行数据,也可以作为一个匿名块的开始。 本节主要描述定义为游标的用法,开启匿名块的用法见BEGIN。 为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 WITH HOLD WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 声明为WITH HOLD的游标,在事务结束时,会缓存游标所有数据,若游标数据量较大,此过程耗时可能较长。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。 declare_statements 声明变量,包括变量名和变量类型,如“sales_cnt int”。 execution_statements 匿名块中要执行的语句。 取值范围:已存在的函数名称。
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 WITH HOLD | WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 跨节点事务不支持WITH HOLD(例如在多Coordinator部署集群中所创建的含有DDL的事务属于跨节点事务)。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。
  • 注意事项 游标命令只能在事务块里使用。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。 应该小心使用二进制游标。文本格式一般都比对应的二进制格式占用的存储空间大。二进制游标返回内部二进制形态的数据,可能更易于操作。如果想以文本方式显示数据,则以文本方式检索会为用户节约很多客户端的工作。比如,如果查询从某个整数列返回1,在缺省的游标里将获得一个字符串1,但在二进制游标里将得到一个4字节的包含该数值内部形式的数值(大端顺序)。
  • 示例 --向gs_global_config系统表中插入单个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password1'); --向gs_global_config系统表中插入多个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password2'),('password3'); --清空gs_global_config系统表中所有弱口令。 gaussdb=# DROP WEAK PASSWORD DICTIONARY; --查看现有弱口令。 gaussdb=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password';
共100000条