华为云用户手册

  • 语法格式 回收空间并更新统计信息,关键字顺序必须按语法显示的顺序给出。 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.200及以上集群版本支持) 1 VACUUM DELTAMERGE [ table_name ][partition_name]; 针对HDFS表,删除HDFS表在HDFS存储上的空值分区目录。 1 VACUUM HDFSDIRECTORY [ table_name ];
  • 参数说明 表1 VACUUM参数说明 参数 描述 取值范围 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同时使用会报错:COMPACT can not be used with PARTITION. - partition_name 要清理的表的分区名称。 缺省时为所有分区。 DELTAMERGE 只针对HDFS表和列存表,将HDFS表或列存表的delta表中的数据转移到主表上存储。对HDFS表而言,当delta表中数据量小于六万行,则不作迁移,只有在大于或等于六万行数据时,将delta表中所有数据迁移到HDFS上,并通过truncate清理delta表的存储空间。对列存表而言,此操作总是会将delta表中的数据全部转移到CU中。 说明: 为了检查列存delta表中的信息(HDFS表的delta表数据可以通过explain analyze查到),提供下述DFX函数,用于获取某个列存表的delta表中数据存储情况: pgxc_get_delta_info(TEXT),传入参数为列存表名,搜集并显示各个节点上的对应delta表信息,包括当前存活tuple数量、表大小、使用的最大block ID。 get_delta_info(TEXT),传入参数为列存表名,汇总pgxc_get_delta_info得到的结果,返回其delta表整体的当前存活tuple数量、表大小、使用的最大block ID。查询临时表delta信息时,需要显示指定临时表的schema,否则会报错找不到表。 - HDFSDIRECTORY 只针对HDFS表,清理HDFS表(存储在HDFS表的目录下)的空值分区目录。 -
  • 参数说明 表1 SET参数说明 参数 描述 取值范围 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 }}};
  • 参数说明 表1 DROP SCHEMA参数说明 参数 描述 取值范围 IF EXISTS 如果指定的模式不存在,发出一个notice而不是抛出一个错误。 - schema_name 要删除的模式名。 已存在的模式名。 CASCADE | RESTRICT 当执行删除操作时,如何处理依赖对象中的相关数据。 CASCADE:自动删除包含在模式中的对象。 RESTRICT:如果模式包含任何对象,则删除失败(缺省行为)。 不要随意删除pg_temp或pg_toast_temp开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。 无法删除当前模式。如果要删除当前模式,须切换到其他模式下。
  • 语法格式 开启匿名块 1 2 3 4 5 [DECLARE [declare_statements]] BEGIN execution_statements END; / 开启事务 1 2 3 4 5 6 7 BEGIN [ WORK | TRANSACTION ] [ { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [, ...] ];
  • 参数说明 表1 MERGE INTO参数说明 参数 描述 取值范围 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优。 - INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 partition_clause 用来指定目标表分区的子句。该参数9.1.0及以上集群版本支持。 说明: 只有当目标表是分区表时可以指定分区。 指定的分区名需要是目标表已存在的分区或者指定的分区键值所处的分区已存在。 alias 目标表的别名。 字符串,符合标识符命名规范。详情请参见标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 partition_clause 用来指定源表分区的子句。该参数9.1.0及以上集群版本支持。 只有当源表是分区表时可以指定分区,视图或者子查询不支持指定分区。 指定的分区名需要是源表已存在的分区或者指定的分区键值所处的分区已存在。 alias 目标表的别名。 字符串,符合标识符命名规范。详情请参见标识符命名规范。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。ON关联条件可以是ctid,xc_node_id,tableoid这三个系统列。 - WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列。不支持更新系统表、系统列。 当指定目标表的分区时,若UPDATE目标表的分区键导致分区变化: 目标表是列存表时,会报错“The inserted partition key is not mapped to the specified 'partition_name' partition”。 目标表是行存表时: 若目标表的表属性为ENABLE ROW MOVEMENT,则不会报错,更新的数据会属于新分区。 若目标表的表属性为DISABLE ROW MOVEMENT,会报错“fail to update partitioned table 'table_name' ”。 - WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 当指定目标表的分区时,若INSERT了超出该分区范围的数据,会报错“The inserted partition key is not mapped to the specified 'partition_name' partition”。 - 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 15 16 17 MERGE [/*+ plan_hint */] INTO table_name [ partition_clause ] [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ partition_clause ] [ [ 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 ] } ]; where partition_clause can be: PARTITION ( partition_name ) | PARTITION FOR ( partition_key_value [, ...] )
  • 注意事项 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 不支持PREPARE。 不支持重分布过程中MERGE INTO。 不支持对包含触发器的目标表执行MERGE INTO。 对roundrobin表执行MERGE INTO时,推荐关闭GUC参数allow_concurrent_tuple_update,否则会不支持部分MERGE INTO语句。
  • 语法格式 1 2 3 4 5 ALTER [ ROW LEVEL SECURITY ] POLICY [ IF EXISTS ] policy_name ON table_name RENAME TO new_policy_name ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ TO { role_name | PUBLIC } [, ...] ] [ USING ( using_expression ) ]
  • 参数说明 表1 ALTER ROW LEVEL SECURITY POLICY参数说明 参数 描述 取值范围 policy_name 行访问控制策略名称。 字符串,符合标识符命名规范。 table_name 行访问控制策略的表名。 已存在的表名。 new_policy_name 新的行访问控制策略名称。 - role_name 行访问控制策略应用的数据库用户,可以指定多个用户,PUBLIC表示应用到所有用户。 已存在的角色名。 using_expression 行访问控制的表达式,返回值为boolean类型。 -
  • 语法格式 向用户组中添加用户。 1 2 ALTER GROUP group_name ADD USER user_name [, ... ]; 从用户组中删除用户。 1 2 ALTER GROUP group_name DROP USER user_name [, ... ]; 修改用户组的名称。 1 2 ALTER GROUP group_name RENAME TO new_name;
  • 参数说明 表1 CLEAN CONNECTION参数说明 参数 描述 取值范围 CHECK 仅在节点列表为TO ALL时可以指定。如果指定该参数,会在清理连接之前检查数据库是否被其他会话连接访问。此参数主要用于DROP DATABASE之前的连接访问检查,如果发现有其他会话连接,则将报错并停止删除数据库。 - FORCE 仅在节点列表为TO ALL时可以指定,如果指定该参数,所有和指定dbname和username相关的线程都会收到SIGTERM信号,然后被强制关闭。 - COORDINATOR ( nodename [, ... ] ) | NODE ( nodename [, ... ] ) | ALL 删除指定节点上的连接。有三种场景: 删除指定CN上的连接。 删除指定DN上的连接。 删除所有节点上的连接,包括CN和DN。 可替换其中的nodename为已存在的节点名。 dbname 删除指定数据库上的连接。如果不指定,则删除所有数据库的连接。 有效的数据库名。 username 删除指定用户上的连接。如果不指定,则删除所有用户的连接。 有效的用户名。
  • 示例 删除数据库template1在dn1和dn2节点上的连接。 1 CLEAN CONNECTION TO NODE (dn1,dn2) FOR DATABASE template1; 删除用户jack在dn1节点上的连接。 1 CLEAN CONNECTION TO NODE (dn1) TO USER jack; 删除在数据库gaussdb上的所有连接。 1 CLEAN CONNECTION TO ALL FORCE FOR DATABASE gaussdb;
  • 示例 授予用户webuser对模式tpcds下视图的所有操作权限: 1 2 3 4 5 6 7 8 DO $$DECLARE r record; BEGIN FOR r IN SELECT c.relname,n.nspname 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$$;
  • 示例 创建表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权限的角色可以赋予或者撤销任何非系统管理员角色的权限。
  • 参数说明 表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 文本搜索配置项的值。 -
  • 示例 创建文本搜索配置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 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效果相同。 -
共100000条