华为云用户手册

  • 示例 创建表reason,并向表中插入数据: 1 2 3 4 5 6 7 8 9 DROP TABLE IF EXISTS reason; CREATE TABLE reason ( a int primary key, b int, c int ); INSERT INTO reason VALUES (1, 2, 3); 开始一个事务: 1 START TRANSACTION; 定义一个名为cursor1的游标: 1 CURSOR cursor1 FOR SELECT * FROM tpcds.reason; 忽略游标cursor1的前3行: 1 MOVE FORWARD 3 FROM cursor1; 抓取游标cursor1的前4行: 1 FETCH 4 FROM cursor1; 关闭游标: 1 CLOSE cursor1; 结束一个事务: 1 END;
  • 语法格式 1 MOVE [ direction [ FROM | IN ] ] cursor_name; 其中direction子句为可选参数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 注意事项 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的进程被终止。 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即drop user不支持跨数据库进行级联删除。 在多租户场景下,删除组用户时,业务用户也会同时被删除,如果指定CASCADE级联删除,那么删除业务用户时同时也指定CASCADE。如果在删除某个用户失败时,会报错,同时其他用户也无法成功删除。 如果用户A创建的GDS外表指定的错误表在用户B的schema下,则无法通过drop user指定CASCADE关键字直接删除用户B。 DROP USER若提示role is being used by other users错误,可能原因为CLEAN CONNECTION过程存在线程无法及时响应信号,出现连接清理不完全的情况,需要再次执行CLEAN CONNECTION。 DROP对象操作(如DATABASE、USER/ROLE、SCHEMA、TABLE、VIEW等对象)存在数据丢失风险,尤其含带CASCADE级联删除场景,会将关联的对象一并删除,操作需谨慎,操作前需考虑数据备份。 更多开发设计规范参见总体开发设计规范。
  • 参数说明 表1 DROP USER参数说明 参数 描述 取值范围 IF EXISTS 如果指定的用户不存在,发出一个notice而不是抛出一个错误。 - user_name 待删除的用户名。 已存在的用户名。 CASCADE | RESTRICT 当执行删除操作时,如何处理依赖对象中的相关数据。 说明: 在 GaussDB (DWS)中,存在一个配置参数enable_kill_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: 当参数enable_kill_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 当参数enable_kill_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。 CASCADE:级联删除依赖用户的表等对象。级联删除用户的时候,会删除掉owner是这个用户的对象,并清理掉其他对象对这个用户的授权信息。 RESTRICT:如果用户还有任何依赖的对象,则拒绝删除该用户(缺省行为)。
  • 参数说明 表1 DROP INDEX参数说明 参数 描述 取值范围 CONCURRENTLY 删除索引而不锁定索引表上的并发选择、插入、更新和删除。 普通的DROP INDEX在表上获取排他锁,从而阻止其他访问,直到可以完成索引删除为止。 使用此选项,命令将一直等到冲突的事务完成。 说明: 使用此选项时需要注意:只能指定一个索引名称,并且不支持CASCADE选项(因此,不能以这种方式删除支持UNIQUE或PRIMARY KEY约束的索引)。可以在事务块内执行常规的DROP INDEX命令,但不能以DROP INDEX CONCURRENTLY方式执行。 - IF EXISTS 如果指定的索引不存在,则发出一个notice而不是抛出一个错误。 - index_name 要删除的索引名。 已存在的索引。 CASCADE | RESTRICT 当执行删除操作时,如何处理依赖对象中的相关数据。 CASCADE:表示允许级联删除依赖于该索引的对象。 RESTRICT(缺省值):表示有依赖与此索引的对象存在,则该索引无法被删除。
  • 示例 将系统权限授权给用户或者角色。 将sysadmin所有可用权限授权给joe用户: 1 GRANT ALL PRIVILEGES TO joe; 授权成功后,用户joe会拥有sysadmin的所有权限。 将对象权限授权给用户或者角色。 将表tpcds.reason的SELECT权限授权给用户joe: 1 GRANT SELECT ON TABLE tpcds.reason TO joe; 将表tpcds.reason的所有权限授权给用户kim: 1 GRANT ALL PRIVILEGES ON tpcds.reason TO kim; 授权成功后,kim用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。 将模式tpcds的使用权限授权给用户joe: 1 GRANT USAGE ON SCHEMA tpcds TO joe; 授权成功后,joe用户就拥有了模式schema的USAGE权限,允许访问包含在指定模式schema中的对象。 将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe: 1 GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe; 授权成功后,用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限会立即生效。 1 GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe ; 将函数func_add_sql的EXECUTE权限授权给用户joe。 1 2 3 4 5 6 CREATE FUNCTION func_add_sql(f1 integer,f2 integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; GRANT EXECUTE ON FUNCTION func_add_sql(integer, integer) TO joe; 将序列serial的UPDATE权限授权给joe用户。 1 GRANT UPDATE ON SEQUENCE serial TO joe; 将数据库gaussdb的连接权限授权给用户joe,并给予其在gaussdb中创建schema的权限: 1 GRANT create,connect on database gaussdb TO joe ; 将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人: 1 GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager; 将用户或者角色的权限授权给其他用户或角色。 将用户joe的权限授权给用户manager,并允许该角色将权限授权给其他人: 1 GRANT joe TO manager WITH ADMIN OPTION; 将用户manager的权限授权给senior_manager用户: 1 GRANT manager TO senior_manager;
  • 参数说明 表2 GRANT的参数说明 参数 描述 取值范围 role_name 已存在用户名称。 字符串,要符合标识符命名规范。最多为63个字符。 table_name 已存在表名称。 字符串,长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 column_name 已存在字段名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 schema_name 已存在模式名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 database_name 已存在数据库名称。 字符串,要符合标识符的命名规范:数据库名称是由大小写英文字母、数字、_和$组合而成,并且不能以数字和$开头。 function_name 已存在函数名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 sequence_name 已存在序列名称。 字符串,仅可以使用小写字母(a~z)、 大写字母(A~Z),数字和特殊字符"#","_","$"的组合。 domain_name 已存在域类型名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 fdw_name 已存在外部数据包名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 lang_name 已存在语言名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 type_name 已存在类型名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 group_name 已存在的子集群名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 argmode 参数模式。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 arg_name 参数名称。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 arg_type 参数类型。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。 loid 包含本页的大对象的标识符。 字符串,要符合标识符命名规范。详情请参见标识符命名规范。
  • 权限分类 表1 GRANT的权限分类 参数 描述 SELECT 允许对指定的表、视图、序列执行SELECT语句。 INSERT 允许对指定的表执行INSERT语句。 UPDATE 允许对声明的表中任意字段执行UPDATE语句。SELECT… FOR UPDATE和SELECT… FOR SHARE除了需要SELECT权限外,还需要UPDATE权限。 DELETE 允许执行DELETE语句删除指定表中的数据。 TRUNCATE 允许执行TRUNCATE语句删除指定表中的所有记录。 REFEREN CES 创建一个外键约束,必须拥有参考表和被参考表的REFERENCES权限。 TRIGGER 创建一个触发器,必须拥有表或视图的TRIGGER权限。 ANALYZE | ANALYSE 对表执行ANALYZE | ANALYSE操作来收集表的统计信息,必须拥有表的ANALYZE | ANALYSE权限。 CREATE 对于数据库,允许在数据库里创建新的模式。 对于模式,允许在模式中创建新的对象。如果要重命名一个对象,用户除了必须是该对象的所有者外,还必须拥有该对象所在模式的CREATE权限。 对于子集群,允许在子集群中创建表对象。 CONNECT 允许用户连接到指定的数据库。 TEMPORARY | TEMP 允许在使用指定数据库时创建临时表。 EXECUTE 允许使用指定的函数,以及利用这些函数实现的操作符。 USAGE 对于过程语言,允许用户在创建函数的时候指定过程语言。 对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只能看到这些对象的名字。 对于序列,USAGE允许使用nextval函数。 对于子集群, 对包含在指定模式中的对象有访问权限时,USAGE允许访问指定子集群下的表对象。 COMPUTE 针对计算子集群,允许用户在具有compute权限的计算子集群上进行弹性计算。 ALTER 允许修改表、模式或函数。 DROP 允许删除表、模式或函数。 VACUUM 允许对表执行VACUUM。 ALL PRIVILEGES 一次赋予指定用户/角色所有可赋予的权限。只有系统管理员有权执行GRANT ALL PRIVILEGES。 WITH GRANT OPTION 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC。 说明: NODE GROUP不支持WITH GRANT OPTION功能。 使用with grant option时需确保security_enable_options参数值中设置了grant_with_grant_option。 WITH ADMIN OPTION 指定权限是否允许转授。如果声明了WITH ADMIN OPTION,角色的成员又可以将角色的成员身份授予其他人。
  • 语法格式 将表或视图的访问权限赋予指定的用户或角色。不允许对表分区进行GRANT操作,对表分区进行GRANT操作会引起告警。 1 2 3 4 5 6 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将表中字段的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将数据库的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将域的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持赋予域的访问权限。 将外部数据源的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将外部服务器的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将函数的访问权限赋予给指定的用户或角色。 1 2 3 4 5 GRANT { { EXECUTE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将过程语言的访问权限赋予给指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持过程语言。 将大对象的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持大对象。 将序列的访问权限赋予指定的用户或角色。 1 2 3 4 5 GRANT { { SELECT | UPDATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将子集群的访问权限赋予指定的用户或角色。普通用户不能执行针对Node Group的GRANT/REVOKE操作。 1 2 3 4 GRANT { CREATE | USAGE | COMPUTE | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将模式的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { { CREATE | USAGE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名字,并不能实际进行对象访问。 将类型的访问权限赋予指定的用户或角色。 1 2 3 4 GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; 当前版本暂时不支持赋予类型的访问权限。 将角色的权限赋予其他用户或角色的语法。 1 2 3 GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]; 将所有权限赋予指定的角色。 1 2 GRANT ALL { PRIVILEGES | PRIVILEGE } TO role_name;
  • 功能描述 对角色和用户进行授权操作。 使用GRANT命令进行用户授权包括以下三种场景: 将系统权限授权给角色或用户 系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和 LOG IN。 系统权限一般通过CREATE/ALTER ROLE语法来指定。其中,SYSADMIN权限可以通过GRANT/REVOKE ALL PRIVILEGE授予或撤销。但系统权限无法通过ROLE和USER的权限被继承,也无法授予PUBLIC。 将数据库对象授权给角色或用户 将数据库对象(表和视图、指定字段、数据库、函数、模式等)的相关权限授予特定角色或用户。 GRANT命令将数据库对象的特定权限授予一个或多个角色。这些权限会追加到已有的权限上。 关键字PUBLIC表示该权限要赋予所有角色,包括以后创建的用户。PUBLIC可以看做是一个隐含定义好的组,它总是包括所有角色。任何角色或用户都将拥有通过GRANT直接赋予的权限和所属的权限,再加上PUBLIC的权限。 如果声明了WITH GRANT OPTION,则被授权的用户也可以将此权限赋予他人,否则就不能授权给他人。这个选项不能赋予PUBLIC,这是GaussDB(DWS)特有的属性。 GaussDB(DWS)会将某些类型的对象上的权限授予PUBLIC。默认情况下,对表、表字段、序列、外部数据源、外部服务器、模式或表空间对象的权限不会授予PUBLIC,而以下这些对象的权限会授予PUBLIC:数据库的CONNECT权限和CREATE TEMP TABLE权限、函数的EXECUTE特权、语言和数据类型(包括域)的USAGE特权。对象拥有者可以撤销默认授予PUBLIC的权限并专门授予权限给其他用户。为了更安全,建议在同一个事务中创建对象并设置权限,这样其他用户就没有时间窗口使用该对象。另外,这些初始的默认权限可以使用ALTER DEFAULT PRIVILEGES命令修改。 将角色或用户的权限授权给其他角色或用户 将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。 当声明了WITH ADMIN OPTION,被授权的用户可以将该权限再次授予其他角色或用户,以及撤销所有由该角色或用户继承到的权限。当授权的角色或用户发生变更或被撤销时,所有继承该角色或用户权限的用户拥有的权限都会随之发生变更。 数据库系统管理员可以给任何角色或用户授予/撤销任何权限。拥有CREATEROLE权限的角色可以赋予或者撤销任何非系统管理员角色的权限。
  • 示例 创建文本搜索配置ngram1。 1 2 DROP TEXT SEARCH CONFIGURATION IF EXISTS ngram1; CREATE TEXT SEARCH CONFIGURATION ngram1 (parser=ngram) WITH (gram_size = 2, grapsymbol_ignore = false); 给文本搜索类型ngram1添加类型映射。 1 ALTER TEXT SEARCH CONFIGURATION ngram1 ADD MAPPING FOR multisymbol WITH simple; 修改文本搜索配置的所有者。 1 2 CREATE USER joe password '{Password}'; ALTER TEXT SEARCH CONFIGURATION ngram1 OWNER TO joe; 修改文本搜索配置的schema。 1 ALTER TEXT SEARCH CONFIGURATION ngram1 SET SCHEMA joe; 重命名文本搜索配置。 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram1 RENAME TO ngram_1; 删除类型映射: 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram_1 DROP MAPPING IF EXISTS FOR multisymbol; 创建文本搜索配置: 1 2 DROP TEXT SEARCH CONFIGURATION IF EXISTS english_1; CREATE TEXT SEARCH CONFIGURATION english_1 (parser=default); 增加文本搜索配置字串类型映射。 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR word WITH simple,english_stem; 增加文本搜索配置字串类型映射。 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR email WITH english_stem, french_stem; 修改文本搜索配置字串类型映射。 1 ALTER TEXT SEARCH CONFIGURATION english_1 ALTER MAPPING REPLACE french_stem with german_stem; 查询文本搜索配置相关信息。 1 SELECT b.cfgname,a.maptokentype,a.mapseqno,a.mapdict,c.dictname FROM pg_ts_config_map a,pg_ts_config b, pg_ts_dict c WHERE a.mapcfg=b.oid AND a.mapdict=c.oid AND b.cfgname='english_1' ORDER BY 1,2,3,4,5;
  • 参数说明 表1 ALTER TEXT SEARCH CONFIGURATION参数说明 参数 描述 取值范围 name 需要修改的文本搜索配置的名称,可以用模式修饰。 - token_type 与配置的语法解析器关联的字串类型的名称。 详细信息参见解析器。 dictionary_name 文本搜索字典名称。 如果有多个字典,则它们会按指定的顺序搜索。 - old_dictionary 映射中要替换的文本搜索字典名称。 - new_dictionary 替换old_dictionary的文本搜索字典的名称。 - new_owner 文本搜索配置的新所有者。 有效的用户名。 new_name 文本搜索配置的新名称。 字符串,需符合标识符命名规范。 new_schema 文本搜索配置的新模式名。 有效的模式名。 configuration_option 文本搜索配置项。 详细信息参见CREATE TEXT SEARCH CONFIGURATION。 value 文本搜索配置项的值。 -
  • 语法格式 增加文本搜索配置字串类型映射。 1 2 ALTER TEXT SEARCH CONFIGURATION name ADD MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 修改文本搜索配置字典。 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] REPLACE old_dictionary WITH new_dictionary; 修改文本搜索配置字串类型。 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 更改文本搜索配置字典。 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING REPLACE old_dictionary WITH new_dictionary; 删除文本搜索配置字串类型映射。 1 2 ALTER TEXT SEARCH CONFIGURATION name DROP MAPPING [ IF EXISTS ] FOR token_type [, ... ]; 重命名文本搜索配置所有者。 1 ALTER TEXT SEARCH CONFIGURATION name OWNER TO new_owner; 重命名文本搜索配置名称。 1 ALTER TEXT SEARCH CONFIGURATION name RENAME TO new_name; 重命名文本搜索配置命名空间。 1 ALTER TEXT SEARCH CONFIGURATION name SET SCHEMA new_schema; 修改文本搜索配置属性。 1 ALTER TEXT SEARCH CONFIGURATION name SET ( { configuration_option = value } [, ...] ); 重置文本搜索配置属性。 1 ALTER TEXT SEARCH CONFIGURATION name RESET ( {configuration_option} [, ...] ); ADD MAPPING FOR选项为文本搜索配置增加字串类型映射;如果ADD MAPPING FOR后面任何一个字串类型的映射已经存在于此文本搜索配置中,那么系统将会报错。 ALTER MAPPING FOR选项会首先清除已有的字串类型映射,然后添加指定的字串类型映射。 ALTER MAPPING REPLACE ... WITH ... 与ALTER MAPPING FOR ... REPLACE ... WITH ...选项会直接使用new_dictionary替换old_dictionary。需要注意的是,只有pg_ts_config_map系统表中存在maptokentype与old_dictionary对应关系的元组时,才能更新成功,否则不会成功,也不会有任何提示信息返回。 DROP MAPPING FOR选项会删除当前文本搜索配置中指定的字串类型映射。 如果没有指定IF EXISTS选项,当DROP MAPPING FOR选项指定的字串类型映射在文本搜索配置中不存在时,数据库会报错。
  • 参数说明 表1 DROP ROW LEVEL SECURITY POLICY参数说明 参数 描述 取值范围 IF EXISTS 如果指定的行访问控制策略不存在,发出一个notice而不是抛出一个错误。 - policy_name 要删除的行访问控制策略的名称。 已存在的行访问控制策略的名称。 table_name 要删除的行访问控制策略所在的数据表名。 已存在的行访问控制策略所在的数据表名。 CASCADE/RESTRICT 仅适配此语法,无对象依赖于该行访问控制策略,CASCADE和RESTRICT效果相同。 -
  • 参数说明 表1 ANALYZE | ANALYSE参数说明 参数 描述 取值范围 VERBOSE 启用VERBOSE后,ANALYZE会发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。 - LIGHT 轻量化模式下对表收集的统计信息保存到内存中,不写入系统表,执行时对表加一级锁。 - FORCE FORCE模式支持表的统计信息被锁定的情况下进行强制刷新。 - PREDICATE PREDICATE模式将只对当前识别到的谓词列计算统计信息,谓词信息是在查询解析阶段收集,动态采样也支持谓词列采样。该参数仅9.1.0.100及以上集群版本支持。 PREDICATE详细信息参考GUC参数analyze_predicate_column_threshold。 table_name 需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。 对于ANALYZE收集统计信息,目前仅支持行存表、列存表、HDFS表、ORC格式的OBS外表、CARBONDATA格式的OBS外表、协同分析的外表。 表名长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 column_name 需要分析特定列的列名,默认为所有列。 已有的列名,格式为:column_1_name,column_2_name,column_3_name.... partition_name 表示分析该分区表的统计信息。目前语法上支持分区表做ANALYZE,但功能实现上暂不支持对指定分区统计信息的分析。 字符串,要符合分区名的命名规范。 foreign_table_name 需要分析的特定外表的表名(可能会带模式名),该表的数据存放于HDFS分布式文件系统中。 字符串,要符合外表的命名规范。 FOREIGN TABLES 分析所有当前用户权限下,数据位于HDFS分布式文件系统中的HDFS外表。 字符串,要符合HDFS外表的命名规范。 index_name 需要分析的特定索引表的表名(可能会带模式名)。 字符串,要符合索引表的命名规范。 FAST|COMPLETE 不同模式下,对行存表和列存表进行校验。 行存表 FAST模式下,主要对于行存表的CRC和page header进行校验,如果校验失败则会告警; COMPLETE模式下,主要对行存表的指针、tuple进行解析校验。 列存表 FAST模式下,主要对于列存表的CRC和magic进行校验,如果校验失败则会告警; COMPLETE模式下,主要对列存表的CU进行解析校验。 CASCADE CASCADE模式下会对当前表的所有索引进行检测处理。 -
  • 示例 使用ANALYZE语句更新表customer_info统计信息: 1 ANALYZE customer_info; 使用ANALYZE VERBOSE语句更新表customer_info统计信息,并输出表的相关信息: 1 2 3 4 5 ANALYZE VERBOSE customer_info; INFO: analyzing "cstore.pg_delta_3394584009"(cn_5002 pid=53078) INFO: analyzing "public.customer_info"(cn_5002 pid=53078) INFO: analyzing "public.customer_info" inheritance tree(cn_5002 pid=53078) ANALYZE
  • 语法格式 收集表的统计信息。 1 2 { ANALYZE | ANALYSE } [ { VERBOSE | LIGHT | FORCE | PREDICATE } ] [ table_name [ ( column_name [, ...] ) ] ]; 收集分区的统计信息。 1 2 3 { ANALYZE | ANALYSE } [ { VERBOSE | LIGHT | FORCE } ] [ table_name [ ( column_name [, ...] ) ] ] PARTITION ( partition_name ) ; 普通分区表目前支持针对某个分区的统计信息的语法,但功能上不支持针对某个分区的统计信息收集。对指定分区执行ANALYZE,会有相应的WARNING提示。 不支持使用临时采样表来收集分区的统计信息。 不支持分区上的多列统计信息和表达式统计信息。 收集外表的统计信息。 1 2 { ANALYZE | ANALYSE } [ VERBOSE ] { foreign_table_name | FOREIGN TABLES };
  • 注意事项 仅8.1.1及以上集群版本支持在匿名块、事务块、函数或存储过程内对单表进行ANALYZE操作。 对于ANALYZE全库,库中各表的ANALYZE处于不同的事务中,所以不支持在匿名块、事务块、函数或存储过程内对全库执行ANALYZE。 统计信息的回滚操作不支持PG_CLASS中相关字段的回滚。 ANALYZE VERIFY操作处理的大多为异常场景检测需要使用RELEASE版本。ANALYZE VERIFY场景不触发远程读,因此远程读参数不生效。对于关键系统表出现错误被系统检测出页面损坏时,将直接报错不再继续检测。 全局临时表在每个会话的ANALYZE的统计信息独立。每个会话都有自己的统计信息。 单次新增、修改量占表总量10%以上场景,需在业务中增加显式Analyze操作。 更多开发设计规范参见总体开发设计规范。
  • 功能描述 用于收集有关数据库中表内容的统计信息,统计结果存储在系统表PG_STATISTIC下。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column和partition_name参数把分析限定在特定的表、列或分区表中。 能够执行ANALYZE特定表的用户,包括表的所有者、表所在数据库的所有者、通过GRANT被授予该表上ANALYZE权限的用户或者被授予了gs_role_analyze_any角色的用户以及有SYSADMIN属性的用户。 在百分比采样收集统计信息时,用户需要被授予ANALYZE和SELECT权限。 ANALYZE|ANALYSE VERIFY用于检测数据库中普通表(行存表、列存表)的数据文件是否损坏,目前此命令暂不支持HDFS表。 开启分区统计信息参数enable_analyze_partition,对分区表设置表级incremental_analyze参数,会先对无统计信息或有数据变化的分区执行ANALYZE,然后通过合并分区统计信息方式生成分区主表的统计信息。
  • 参数说明 表1 DELETE参数说明 参数 描述 取值范围 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名字引用的子查询,相当于临时表。 如果声明了RECURSIVE,则允许SELECT子查询通过名字引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS ( {select | values | insert | update | delete} ) – with_query_name指定子查询生成的结果集名字,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 - plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优。 - ONLY 如果指定ONLY则只有该表被删除;如果没有声明,则该表和它的所有子表将都被删除。 - table_name 目标表的名字(可以有模式修饰)。 已存在的表名。 alias 目标表的别名。 字符串,符合标识符命名规范。详情请参见标识符命名规范。 partition_name 分区名。仅8.2.1及以上集群版本支持该选项。 已存在的分区名。 partition_key_value 分区键值。 通过PARTITION FOR ( partition_key_value [, ...] )子句指定的这一组值,可以唯一确定一个分区。 需要进行重命名分区的分区键取值范围。 using_list using子句。 - condition 一个返回boolean值的表达式,用于判断哪些行需要被删除。 - WHERE CURRENT OF cursor_name 当前不支持,仅保留语法接口。 - output_expr DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。 - output_name 一个字段的输出名称。 字符串,符合标识符命名规范。详情请参见标识符命名规范。
  • 注意事项 要删除表中的数据,用户必须对它有DELETE权限。同样也必须有USING子句引用的表以及condition上读取的表的SELECT权限。 对于复制表,仅支持两种场景下的DELETE操作: 有主键约束的场景。 执行计划能下推的场景。 对于列存表,暂时不支持RETURNING子句。 避免使用UPDATE/DELETE大批量刷新和删除数据,考虑使用TRUNCATE PARTITION/DROP PARTITION代替。 更多开发设计规范参见总体开发设计规范。
  • 语法格式 1 2 3 4 5 6 [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE [/*+ plan_hint */] FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ PARTITION ( partition_name ) | PARTITION FOR ( partition_key_value [, ...] ) ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ];
  • 示例 创建异常规则except_rule1。 1 CREATE EXCEPT RULE except_rule_1 WITH (blocktime=2000, spillsize=3000, action=abort); 修改异常规则except_rule1的blocktime规则阈值为3000秒,下盘空间为4000MB。 1 ALTER EXCEPT RULE except_rule_1 WITH (blocktime=3000, spillsize=4000); 创建一个资源池并绑定异常规则集except_rule_1。 1 CREATE resource pool resource_pool_a1 WITH (except_rule='except_rule_1'); 解除资源池resource_pool_a1绑定的异常规则集。 1 ALTER resource pool resource_pool_a1 WITH (except_rule='None');
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 ALTER EXCEPT RULE except_rule_name WITH ( | BLOCKTIME = VALUE, | CPUTIME = VALUE, | ELAPSEDTIME = VALUE, | CPUSKEWPERCENT = VALUE, | SPILLSIZE = VALUE, | BROADCASTSIZE = VALUE, | MEMSIZE = VALUE, | CPUAVGPERCENT = VALUE, | BANDW IDT H = VALUE, | ACTION = ['abort' | 'penalty'] );
  • 参数说明 表1 ALTER EXCEPT RULE参数说明 参数 描述 取值范围 rule_name 异常规则集名称。 字符串,需符合标识符命名规范。 blocktime 作业排队阻塞的最大时间。单位:秒。 数值型,-1,1~INT64_MAX。 elapsedtime 作业执行的最大时间。单位:秒。 数值型,-1,1~INT64_MAX。 allcputime 作业运行中使用的最大CPU时间。单位:秒。 数值型,-1,1~INT64_MAX。 cpuskewpercent 作业执行时的CPU使用倾斜率。单位:百分比。 数值型,-1,1~100。 cpuavgpercent 作业执行时的平均CPU使用率。单位:百分比。 数值型,-1,1~100。 spillsize 作业执行的最大下盘大小。单位:MB。 数值型,-1,1~INT64_MAX。 broadcastsize 作业执行的最大广播大小。单位:MB。 数值型,-1,1~INT64_MAX。 memsize 作业执行使用的最大内存大小。单位:MB。 数值型,-1,1~INT64_MAX。 bandwidth 作业执行可使用的最大网络带宽。单位:MB。 数值型,-1,1~INT64_MAX。
  • 示例 创建列存表指定存储格式和压缩方式: 1 2 3 4 5 6 7 8 9 10 11 12 DROP TABLE IF EXISTS customer_address; CREATE TABLE customer_address ( ca_address_sk INTEGER NOT NULL , ca_address_id CHARACTER(16) NOT NULL , ca_street_number CHARACTER(10) , ca_street_name CHARACTER varying(60) , ca_street_type CHARACTER(15) , ca_suite_number CHARACTER(10) ) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH,COLVERSION=2.0) DISTRIBUTE BY HASH (ca_address_sk); 修改表名: 1 RENAME TABLE customer_address TO new_customer_address;
  • 参数说明 表1 DROP VIEW参数说明 参数 描述 取值范围 IF EXISTS 如果指定的视图不存在,则发出一个notice而不是抛出一个错误。 - view_name 要删除的视图名字。 已存在的视图。 CASCADE | RESTRICT 当执行删除操作时,如何处理依赖对象中的相关数据。 CASCADE:级联删除依赖此视图的对象(比如其他视图)。 RESTRICT:如果有依赖对象存在,则拒绝删除此视图。此选项为缺省值。
  • 什么是SQL SQL是用于访问和处理数据库的标准计算机语言。 SQL提供了各种任务的语句,包括: 查询数据。 在表中插入、更新和删除行。 创建、替换、更改和删除对象。 控制对数据库及其对象的访问。 保证数据库的一致性和完整性。 SQL语言由用于处理数据库和数据库对象的命令和函数组成。该语言还会强制实施有关数据类型、表达式和文本使用的规则。因此在SQL参考章节,除了SQL语法参考外,还会看到有关数据类型、表达式、函数和操作符等信息。
  • SQL发展简史 SQL发展简史如下: 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2) 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3) 2003年,ISO/IEC 9075:2003,SQL:2003(SQL4) 2011年,ISO/IEC 9075:200N,SQL:2011(SQL5)
  • 示例 建立一个保存点,然后撤销建立保存点后执行的所有命令的效果: 1 2 3 4 5 6 7 START TRANSACTION; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT; 查询表的内容,会同时看到1和3,不能看到2,因为2被回滚。 建立并随后销毁一个保存点: 1 2 3 4 5 6 START TRANSACTION; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT; 查询表的内容,会同时看到3和4。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全