华为云用户手册

  • 示例 --创建用户jim,登录密码为********。gaussdb=# CREATE USER jim PASSWORD '********';--创建数据库。gaussdb=# CREATE DATABASE testdb1;--修改用户jim的登录密码。gaussdb=# ALTER USER jim IDENTIFIED BY '**********' REPLACE '********';--锁定jim账户。gaussdb=# ALTER USER jim ACCOUNT LOCK;--解锁jim账户。gaussdb=# ALTER USER jim ACCOUNT UNLOCK;--修改用户名。gaussdb=# ALTER USER jim RENAME TO lisa;--删除用户。gaussdb=# DROP USER lisa CASCADE;
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建一个名为serial的递增序列,从101开始。gaussdb=# CREATE SEQUENCE serial START 101;--创建一个表,定义默认值。gaussdb=# CREATE TABLE t1(c1 bigint default nextval('serial'));--将序列serial的归属列变为t1.c1。gaussdb=# ALTER SEQUENCE serial OWNED BY t1.c1;--删除序列和表。gaussdb=# DROP SEQUENCE serial CASCADE;gaussdb=# DROP TABLE t1;--创建一个序列seq_test。gaussdb=# CREATE SEQUENCE seq_test;--查询序列信息。gaussdb=# \ds List of relations Schema | Name | Type | Owner | Storage --------+----------+----------+-------+--------- public | seq_test | sequence | omm | (1 row)--创建用户u_test并修改序列所有者。gaussdb=# CREATE USER u_test PASSWORD '********';gaussdb=# ALTER SEQUENCE seq_test OWNER TO u_test;gaussdb=# \ds List of relations Schema | Name | Type | Owner | Storage --------+----------+----------+--------+--------- public | seq_test | sequence | u_test | (1 row)--删除用户和序列。gaussdb=# DROP SEQUENCE seq_test;gaussdb=# DROP USER u_test;
  • 参数说明 name 将要修改的序列名称。 IF EXISTS 当序列不存在时使用该选项,不会显示ERROR,而是返回一个NOTICE信息。 MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE 执行序列的最大值。新修改的最大值必须大于当前gtm存储的最大值;如果没有指定,将保持原有的最大值。 取值范围:(gtm_last_value, 263-1]。 OWNED BY 将序列和一个表的指定字段进行关联。这样,在删除该字段或其所在表的时候会自动删除已关联的序列。 如果序列已经和表有关联后,使用这个选项后新的关联关系会覆盖旧的关联。 关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。 使用OWNED BY NONE将删除任何已经存在的关联。 new_owner 序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且该角色必须有序列所在模式上的CREATE权限。
  • 注意事项 序列的所有者或者被授予了序列ALTER权限的用户或者被授予了ALTER ANY SEQUENCE权限的用户才能执行ALTER SEQUENCE命令,三权分立开关关闭时,系统管理员默认拥有该权限。但要修改序列的所有者,当前用户必须是该序列的所有者或者系统管理员,且该用户是新所有者角色的成员。 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。 ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。 修改序列的最大值后,会清空该序列在所有会话的cache。 ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用、
  • 语法格式 修改序列归属列和最大值。 123 ALTER SEQUENCE [ IF EXISTS ] name [MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] [ OWNED BY { table_name.column_name | NONE } ] ; 修改序列的拥有者。 1 ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner;
  • 语法格式 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 COMMENT ON{ AGGREGATE agg_name (agg_type [, ...] ) | CAST (source_type AS target_type) | COLLATION object_name | COLUMN { table_name.column_name | view_name.column_name } | CONSTRAINT constraint_name ON table_name | CONVERSION object_name | DATABASE object_name | DOMAIN object_name | EXTENSION object_name | FOREIGN DATA WRAPPER object_name | FOREIGN TABLE object_name | FUNCTION function_name ( [ {[ argname ] [ argmode ] argtype} [, ...] ] ) | INDEX object_name | OPERATOR operator_name (left_type, right_type) | OPERATOR CLASS object_name USING index_method | OPERATOR FAMILY object_name USING index_method | [ PROCEDURAL ] LANGUAGE object_name | ROLE object_name | SCHEMA object_name | SERVER object_name | TABLE object_name | TABLESPACE object_name | TEXT SEARCH CONFIGURATION object_name | TEXT SEARCH DICTIONARY object_name | TEXT SEARCH PARSER object_name | TEXT SEARCH TEMPLATE object_name | TYPE object_name | VIEW object_name | TRIGGER trigger_name ON table_name} IS 'text';
  • 注意事项 每个对象只存储一条注释,因此要修改一个注释,对同一个对象发出一条新的COMMENT命令即可。要删除注释,在文本字符串的位置写上NULL即可。当删除对象时,注释自动被删除。 目前注释浏览没有安全机制,任何连接到某数据库上的用户都可以看到所有该数据库对象的注释。共享对象(比如数据库、角色、表空间)的注释是全局存储的,连接到任何数据库的任何用户都可以看到它们。因此,不要在注释里存放与安全有关的敏感信息。 对大多数对象,只有对象的所有者或者被授予了对象COMMENT权限的用户可以设置注释,系统管理员默认拥有该权限。 角色没有所有者,所以COMMENT ON ROLE命令仅可以由系统管理员对系统管理员角色执行,有CREATE ROLE权限的角色也可以为非系统管理员角色设置注释。系统管理员可以对所有对象进行注释。
  • 参数说明 agg_name 聚集函数的名称 agg_type 聚集函数参数的类型 source_type 类型转换的源数据类型。 target_type 类型转换的目标数据类型。 object_name 对象名。 table_name.column_name view_name.column_name 列名称。前缀可加表名称或者视图名称。 constraint_name 表约束的名称。 table_name 表的名称。 function_name 函数名称。 argmode,argname,argtype 函数参数的模式、名称、类型。 large_object_oid 大对象的OID。 operator_name 操作符名称。 left_type,right_type 操作参数的数据类型(可以用模式修饰)。当前置或者后置操作符不存在时,可以增加NONE选项。 text 注释。
  • 示例 --建表。gaussdb=# CREATE TABLE emp( empno varchar(7), ename varchar(50), job varchar(50), mgr varchar(7), deptno int);--表添加注释。gaussdb=# COMMENT ON TABLE emp IS '部门表';--字段添加注释。gaussdb=# COMMENT ON COLUMN emp.empno IS '员工编号';gaussdb=# COMMENT ON COLUMN emp.ename IS '员工姓名';gaussdb=# COMMENT ON COLUMN emp.job IS '职务';gaussdb=# COMMENT ON COLUMN emp.mgr IS '上司编号';gaussdb=# COMMENT ON COLUMN emp.deptno IS '部门编号';--查看表的注释。gaussdb=# \d+ Schema | Name | Type | Owner | Size | Storage | Description --------+-------------+----------+-------+------------+----------------------------------+------------- public | emp | table | omm | 0 bytes | {orientation=row,compression=no} | 部门表--查看字段注释。gaussdb=# \d+ emp Table "public.emp" Column | Type | Modifiers | Storage | Stats target | Description --------+-----------------------+-----------+----------+--------------+------------- empno | character varying(7) | | extended | | 员工编号 ename | character varying(50) | | extended | | 员工姓名 job | character varying(50) | | extended | | 职务 mgr | character varying(7) | | extended | | 上司编号 deptno | integer | | plain | | 部门编号Has OIDs: noDistribute By: HASH(empno)Location Nodes: ALL DATANODESOptions: orientation=row, compression=no--删除表emp。gaussdb=# DROP TABLE emp;
  • 注意事项 审计策略的创建与维护有权限限制,只有poladmin、sysadmin或初始用户有权限进行此操作。 在创建审计策略之前,需要确保已经开启安全策略开关,即设置GUC参数“enable_security_policy=on”后,脱敏策略才会生效。 系统管理员或安全策略管理员可以访问GS_AUDITING_POLICY、GS_AUDITING_POLICY_AC CES S、GS_AUDITING_POLICY_PRIVILEGES和GS_AUDITING_POLICY_FILTERS系统表,查询已创建的审计策略。 审计策略名称应具有唯一性,避免与现有策略产生冲突。可以使用IF NOT EXISTS来检查指定的审计策略是否存在,以避免重复创建。 在使用DATABASE LINK功能的场景下,客户端发起的DATABASE LINK请求,实际的发送方是服务端,发送端IP地址等相关的属性将是服务端的值。详情见DATABASE LINK。
  • 语法格式 CREATE AUDIT POLICY [ IF NOT EXISTS ] policy_name { { privilege_audit_clause | access_audit_clause } [, ... ] [ filter_group_clause ] [ ENABLE | DISABLE ] }; privilege_audit_clause: 1 PRIVILEGES { DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ] access_audit_clause: ACCESS { DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符命名规范,且最大长度不超过63个字符。若超过63个字符,数据库会截断并保留前63个字符当作审计策略名称。当审计策略名称中包含大写字母时,数据库会自动转换为小写字母,如果需要创建包含大写字母的审计策略名称则需要使用双引号括起来。 标识符需要为小写字母(a-z)、大写字母(A-Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。 resource_label_name 资源标签名称。 DDL 指的是针对数据库执行如下操作时进行审计,目前支持:CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW。 取值为ANALYZE时,ANALYZE和VACCUM操作都会被审计。 DML 指的是针对数据库执行如下操作时进行审计,目前支持:SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。 ALL 指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL | ALL }时,ALL指所有DDL操作;当形式为{ DML | ALL }时,ALL指所有DML操作。 FILTER_TYPE 描述策略过滤的条件类型,包括APP、ROLES、IP。 filter_value 指具体过滤信息内容。 ENABLE|DISABLE 可以打开或关闭统一审计策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 创建一个对数据库执行CREATE的审计策略。 --创建adt1策略。gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; --查看adt1策略。gaussdb=# SELECT * FROM GS_AUDITING_POLICY; polname | polcomments | modifydate | polenabled ---------+-------------+----------------------------+------------ adt1 | | 2023-11-06 16:41:40.947417 | t--查看审计策略的存放位置。gaussdb=# SHOW audit_directory;--删除审计策略adt1。gaussdb=# DROP AUDIT POLICY adt1; 创建一个审计策略,仅审计用户dev_audit进行CREATE操作 。 --创建dev_audit用户。gaussdb=# CREATE USER dev_audit PASSWORD '********';--创建一个表tb_for_audit。gaussdb=# CREATE TABLE tb_for_audit(col1 text, col2 text, col3 text); --创建基于tb_for_audit表的adt_lb0资源标签。gaussdb=# CREATE RESOURCE LABEL adt_lb0 add TABLE(public.tb_for_audit);--创建针对adt_lb0资源进行create操作的adt2审计策略。gaussdb=# CREATE AUDIT POLICY adt2 PRIVILEGES CREATE ON LABEL(adt_lb0) FILTER ON ROLES(dev_audit);--删除审计策略adt2。gaussdb=# DROP AUDIT POLICY adt2;--删除表tb_for_audit。gaussdb=# DROP TABLE tb_for_audit;--删除dev_audit用户。gaussdb=# DROP USER dev_audit; 创建一个仅审计记录用户dev_audit,客户端工具为gsql,IP地址为'10.20.30.40', '127.0.0.0/24',在执行针对adt_lb0资源进行的SELECT、INSERT、DELETE操作数据库的审计策略。 --创建dev_audit用户。gaussdb=# CREATE USER dev_audit PASSWORD '********';--创建审计策略adt3。gaussdb=# CREATE AUDIT POLICY adt3 ACCESS SELECT ON LABEL(adt_lb0), INSERT ON LABEL(adt_lb0), DELETE FILTER ON ROLES(dev_audit), APP(gsql), IP('10.20.30.40', '127.0.0.0/24');--删除审计策略adt3。gaussdb=# DROP AUDIT POLICY adt3;--删除dev_audit用户。gaussdb=# DROP USER dev_audit;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617 --创建基本表table_for_label。gaussdb=# CREATE TABLE table_for_label(col1 int, col2 text);--创建资源标签table_label。gaussdb=# CREATE RESOURCE LABEL table_label ADD COLUMN(table_for_label.col1);--将col2添加至资源标签table_label中。gaussdb=# ALTER RESOURCE LABEL table_label ADD COLUMN(table_for_label.col2);--将资源标签table_label中的一项移除。gaussdb=# ALTER RESOURCE LABEL table_label REMOVE COLUMN(table_for_label.col1);--删除资源标签table_label。gaussdb=# DROP RESOURCE LABEL table_label;--删除基本表table_for_label。gaussdb=# DROP TABLE table_for_label;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435 --开启两个会话,在第一个会话中建表并开启事务插入数据。gaussdb=# CREATE TABLE tbl_test(id int);gaussdb=# BEGIN;gaussdb=# INSERT INTO tbl_test VALUES (1);--在第二个会话中查询会话信息。state为“idle in transaction”表示事务等待提交。gaussdb=# SELECT t1.datname, t1.usename, t1.pid, t2.serial#, t1.state FROM pg_stat_activity t1, dv_sessions t2 WHERE t1.query LIKE 'INSERT INTO tbl_test%' AND t1.sessionid = t2.sid; datname | usename | pid | serial# | state ----------+---------+-----------------+---------+--------------------- postgres | omm | 139802072635136 | 0 | idle in transaction(1 row)--结束会话,不带IMMEDIATE参数,将会强制结束会话,该会话中的事务也会被强制结束。gaussdb=# ALTER SYSTEM KILL SESSION '139802072635136,0'; pg_terminate_backend ---------------------- t(1 row)--重新连接,查询表tbl_test的数据会发现事务被强制结束后数据回滚。gaussdb=# SELECT * FROM tbl_test; id ----(0 rows)--删除表。gaussdb=# DROP TABLE tbl_test;
  • 功能描述 用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表PG_STATISTIC、PG_STATISTIC_EXT下,执行ANALYZE命令后,可在上述系统表中查询收集到的统计信息,也可以通过系统视图PG_STATS、PG_EXT_STATS查询信息。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table_name、column_name和partition_name参数把分析限定在特定的表、列或分区表中。 {ANALYZE|ANALYSE} VERIFY用于检测数据库中普通表的数据文件是否损坏。
  • 注意事项 ANALYZE非临时表不支持在一个匿名块、事务块、函数或存储过程内被执行。ANALYZE临时表支持存储过程中被执行,不支持统计信息回滚操作。 ANALYZE VERIFY如果不涉及远程读场景,远程读参数则不会生效。对于检测出关键系统表页面损坏的错误,将直接报错不再继续检测。 如果ANALYZE不指定参数,则默认处理当前用户拥有相应权限的表。如果参数指定了一个表参数,ANALYZE只处理指定的表。 要对一个表进行ANALYZE操作,用户必须是表的所有者或者被授予了指定表VACUUM权限,三权分立开关关闭时,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行ANALYZE操作(该限制意味着只有系统管理员才能真正对一个数据库进行ANALYZE操作)。ANALYZE会跳过那些用户没有权限的表。 ANALYZE不收集无法做比较或等值运算的列,例如:CURSOR类型。 如果拟分析的表成了一个空表,ANALYZE不会记录该表的统计信息,而原来已有统计信息则会保留。
  • 语法格式 收集表的统计信息。 { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ...] ) ] ] [ WITH PARTITION_MODE ]; 收集分区表的分区统计信息。 { ANALYZE | ANALYSE } [ VERBOSE ] table_name [ ( column_name [, ...] ) ] PARTITION ( partition_name ) ; 使用关键字PARTITION,partition_name必须为一级分区名字。 分布式不支持二级分区。 收集外表的统计信息。 { ANALYZE | ANALYSE } [ VERBOSE ] { foreign_table_name | FOREIGN TABLES };
  • 参数说明 VERBOSE 启用显示进度信息。 如果指定了VERBOSE,ANALYZE发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。 table_name 需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。 对于ANALYZE收集统计信息,目前仅支持行存表的外表。 取值范围:已有的表名。 column_name,column_1_name,column_2_name 需要分析特定列的列名,默认为所有列。 取值范围:已有的列名。 partition_name 如果table为分区表,在关键字PARTITION后面指定分区名partition_name表示分析该分区表的统计信息。 取值范围:表的某一个分区名。 foreign_table_name 需要分析的特定表的表名(可能会带模式名)。 取值范围:已有的表名。 FOREIGN TABLES 分析所有当前用户权限下的外表。 index_name 需要分析的特定索引表的表名(可能会带模式名)。 取值范围:已有的表名。 FAST|COMPLETE 对于行存表,FAST模式下主要对于行存表的CRC和page header进行校验,如果校验失败则会告警;而COMPLETE模式下,则主要对行存表的指针、tuple进行解析校验。 CASCADE CASCADE模式下会对当前表的所有索引进行检测处理。 PARTITION_MODE PARTITION_MODE适用于分区表级联收集统计信息,可选项和含义如下表所示。不适用于非分区表。 表1 PARTITION_MODE选项说明 PARTITION_MODE选项 含义 ALL 收集整表、一级分区的统计信息。 GLOBAL 收集整表的统计信息。 PARTITION 收集一级分区的统计信息。 GLOBAL AND PARTITION 收集整表、一级分区的统计信息。 ALL COMPLETE 收集整表、一级分区的统计信息。 AUTO 缺省值,以statistic_granularity或default_statistic_granularity中配置的参数为准,其中表级参数statistic_granularity的优先级高于全局参数default_statistic_granularity。 其中,ALL和ALL COMPLETE的区别为:ALL_COMPLETE模式下,采用更高的采样率,相应地,计算统计信息的耗时会更长。 从505.0.0之前版本升级到505.0.0及更高版本时,在升级观察期期间,PARTITION_MODE不生效,其行为与升级前版本保持一致。 analyze整库时,不支持指定partition mode,即不支持analyze with global等语法。 analyze整库时,支持设置default_statistic_granularity为GLOBAL或ALL,此时analyze行为和default_statistic_granularity的定义相同;当default_statistic_granularity设置为其他值时,analyze行为退化为GLOBAL行为。
  • 示例 收集表的的统计信息。 --创建customer_info表。gaussdb=# CREATE TABLE customer_info(wr_returned_date_sk INTEGER ,wr_returned_time_sk INTEGER ,wr_item_sk INTEGER NOT NULL,wr_refunded_customer_sk INTEGER ) DISTRIBUTE BY HASH (wr_item_sk);--使用ANALYZE语句更新统计信息。gaussdb=# ANALYZE customer_info;--使用ANALYZE VERBOSE语句更新统计信息,并输出customer_info表的相关信息。gaussdb=# ANALYZE VERBOSE customer_info;INFO: analyzing "public.customer_info"(cn_5002 pid=53078)--使用ANALYZE VERBOSE输出customer_info表的wr_returned_time_sk列信息。gaussdb=# ANALYZE VERBOSE customer_info(wr_returned_time_sk);INFO: analyzing "public.customer_info"(cn_5002 pid=53078) 收集分区表的统计信息。 --创建分区表。gaussdb=# CREATE TABLE customer_par( wr_returned_date_sk INTEGER ,wr_returned_time_sk INTEGER ,wr_item_sk INTEGER NOT NULL,wr_returned_customer_sk INTEGER)DISTRIBUTE BY HASH (wr_item_sk)PARTITION BY RANGE(wr_returned_date_sk)(PARTITION P1 VALUES LESS THAN(2452275),PARTITION P2 VALUES LESS THAN(2452640),PARTITION P3 VALUES LESS THAN(2453000),PARTITION P4 VALUES LESS THAN(MAXVALUE))ENABLE ROW MOVEMENT;--使用ANALYZE语句更新统计信息。gaussdb=# ANALYZE customer_par;--使用ANALYZE VERBOSE输出customer_par表的相关信息。gaussdb=# ANALYZE VERBOSE customer_par;INFO: analyzing "public.customer_par"(cn_5001 pid=446617)--使用ANALYZE VERBOSE输出P1一级分区表的相关信息。gaussdb=# ANALYZE VERBOSE customer_par PARTITION(P1);INFO: analyzing "public.customer_par"(cn_5001 pid=446617) 手动收集多列统计信息。 --手动收集wr_returned_date_sk、wr_returned_time_sk这两列的统计信息。gaussdb=# ANALYZE VERBOSE customer_info (wr_returned_date_sk,wr_returned_time_sk);INFO: analyzing "public.customer_par"(cn_5001 pid=446617) 自动收集多列统计信息。 --给customer_info表创建索引。gaussdb=# CREATE INDEX customer_index ON customer_info USING btree(wr_returned_date_sk,wr_returned_time_sk,wr_item_sk,wr_refunded_customer_sk);--设置auto_statistic_ext_columns参数为4。gaussdb=# set auto_statistic_ext_columns=4;--自动收集多列统计信息。gaussdb=# ANALYZE VERBOSE customer_info;INFO: analyzing "public.customer_info"(cn_5001 pid=446617) 检测当前库的数据文件。 gaussdb=# ANALYZE VERIFY FAST; 检测表和索引的数据文件。 --检查customer_info表。gaussdb=# ANALYZE VERIFY FAST customer_info;--检查customer_index索引。gaussdb=# ANALYZE VERIFY FAST customer_index; 检测表分区的数据文件。 --检查customer_par分区表中的P1分区。gaussdb=# ANALYZE VERIFY FAST customer_par PARTITION (P1); 删除数据。 --删除索引customer_index。gaussdb=# DROP INDEX customer_index;--删除表customer_info。gaussdb=# DROP TABLE customer_info;--删除分区表customer_par。gaussdb=# DROP TABLE customer_par;
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829 --创建源表及触发表。gaussdb=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT);gaussdb=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);--创建DELETE触发器函数。gaussdb=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS $$ DECLARE BEGIN DELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE plpgsql;--创建DELETE触发器。gaussdb=# CREATE TRIGGER delete_trigger BEFORE DELETE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_delete_func();--修改触发器的名称。gaussdb=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed;--删除触发器。gaussdb=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl;--删除函数。gaussdb=# DROP FUNCTION tri_delete_func;--删除源表及触发表。gaussdb=# DROP TABLE test_trigger_src_tbl;gaussdb=# DROP TABLE test_trigger_des_tbl;
  • 功能描述 检查点(CHECKPOINT)是一个事务日志中的点,所有数据文件都在该点被更新以反映日志中的信息,所有数据文件都将被刷新到磁盘。 设置事务日志检查点。预写式日志(WAL)缺省时在事务日志中每隔一段时间放置一个检查点。可以使用gs_guc命令设置相关运行时参数(checkpoint_segments, checkpoint_timeout和incremental_checkpoint_timeout)来调整这个原子化检查点的间隔。
  • 示例 重命名视图。 --创建test_tbl表。gaussdb=# CREATE TABLE test_tb1(col1 INT,col2 INT);--创建视图。gaussdb=# CREATE VIEW abc AS SELECT * FROM test_tb1;--设置视图列的默认值为100。gaussdb=# ALTER VIEW IF EXISTS abc ALTER COLUMN col1 SET DEFAULT 100;--取消视图列的默认值。gaussdb=# ALTER VIEW IF EXISTS abc ALTER COLUMN col1 DROP DEFAULT;--重命名视图。gaussdb=# ALTER VIEW IF EXISTS abc RENAME TO test_v1;--查看视图。gaussdb=# \dv List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-------+--------- public | test_v1 | view | omm | (1 row) 修改视图所有者。 --创建用户。gaussdb=# CREATE ROLE role_test PASSWORD '********';--修改视图所有者。gaussdb=# ALTER VIEW IF EXISTS test_v1 OWNER TO role_test;--查看视图信息。gaussdb=# \dv List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+--------- public | test_v1 | view | role_test | (1 row) 设置视图所属模式。 --创建模式。gaussdb=# CREATE SCHEMA tcpds;--修改视图所属模式。gaussdb=# ALTER VIEW test_v1 SET SCHEMA tcpds;--查看视图信息。gaussdb=# \dv tcpds.test_v1; List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+--------- tcpds | test_v1 | view | role_test | (1 row) 设置与重置视图选项。 --修改视图选项。gaussdb=# ALTER VIEW tcpds.test_v1 SET (security_barrier = TRUE);ALTER VIEW--查看。gaussdb=# \dv tcpds.test_v1 List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+------------------------- tcpds | test_v1 | view | role_test | {security_barrier=true}(1 row)--修改check_option选项。gaussdb=# ALTER VIEW tcpds.test_v1 SET (check_option = 'LOCAL');--查看。gaussdb=# \dv tcpds.test_v1 List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+-------------------------------------------- tcpds | test_v1 | view | role_test | {security_barrier=true,check_option=LOCAL}(1 row)--重置视图选项。gaussdb=# ALTER VIEW tcpds.test_v1 RESET (security_barrier);ALTER VIEWgaussdb=# ALTER VIEW tcpds.test_v1 RESET (check_option);ALTER VIEW--查看。gaussdb=# \dv tcpds.test_v1 List of relations Schema | Name | Type | Owner | Storage --------+---------+------+-----------+--------- tcpds | test_v1 | view | role_test | (1 row)--删除视图test_v1。gaussdb=# DROP VIEW tcpds.test_v1;DROP VIEW--删除表test_tb1。gaussdb=# DROP TABLE test_tb1;DROP TABLE--删除用户。gaussdb=# DROP ROLE role_test;DROP ROLE--删除schema。gaussdb=# DROP SCHEMA tcpds;DROP SCHEMA
  • 参数说明 IF EXISTS 使用这个选项,如果视图不存在时不会产生错误,仅会有一个提示信息。 view_name 视图名称,可以用模式修饰。 取值范围:字符串,已经存在的视图名。 column_name 字段名称。 取值范围:字符串,已经存在的视图的字段名。 SET/DROP DEFAULT 设置或删除一个列的缺省值,该参数暂无实际意义。 new_owner 视图新所有者的用户名称。 new_name 视图的新名称。 new_schema 视图的新模式。 view_option_name [ = view_option_value ] 该子句为视图指定一个可选的参数。 security_barrier:设置视图是否提供行级安全。取值范围为Boolean类型。缺省值为true。 check_option:控制更新视图的行为。支持参数值为CASCADED或LOCAL。该参数取值不可缺省。 expression 常量、函数或SQL表达式。
  • 语法格式 设置视图列的默认值。 12 ALTER VIEW [ IF EXISTS ] view_name ALTER [ COLUMN ] column_name SET DEFAULT expression; 取消列视图列的默认值。 12 ALTER VIEW [ IF EXISTS ] view_name ALTER [ COLUMN ] column_name DROP DEFAULT; 修改视图的所有者。 12 ALTER VIEW [ IF EXISTS ] view_name OWNER TO new_owner; 重命名视图。 12 ALTER VIEW [ IF EXISTS ] view_name RENAME TO new_name; 设置视图的所属模式。 12 ALTER VIEW [ IF EXISTS ] view_name SET SCHEMA new_schema; 设置视图的选项。 12 ALTER VIEW [ IF EXISTS ] view_name SET ( { view_option_name [ = view_option_value ] } [, ... ] ); 重置视图的选项。 12 ALTER VIEW [ IF EXISTS ] view_name RESET ( view_option_name [, ... ] );
  • 注意事项 只有视图的所有者或者被授予了视图ALTER权限的用户才可以执行ALTER VIEW命令,三权分立开关关闭时,系统管理员默认拥有该权限。针对所要修改属性的不同,对其还有以下权限约束: 修改视图的模式,当前用户必须是视图的所有者或者系统管理员,且要有新模式的CREATE权限。三权分立开关打开时,系统管理员不能修改视图模式。 修改视图的所有者,当前用户必须是视图的所有者或者系统管理员,且该用户必须是新所有者角色的成员,并且此角色必须有视图所在模式的CREATE权限。三权分立开关打开时,系统管理员不能修改视图的所有者。 禁止修改视图中列的类型。
  • 参数说明 CHECK 仅在节点列表为TO ALL时可以指定。如果指定该参数,会在清理连接之前检查数据库是否被其他会话连接访问。此参数主要用于DROP DATABASE之前的连接访问检查,如果发现有其他会话连接,则将报错并停止删除数据库。 FORCE 仅在节点列表为TO ALL时可以指定,如果指定该参数,当前CN中所有和指定dbname和username相关的线程都会收到SIGTERM信号,相应的会话被强制关闭,事务会中止,网络连接被清理。DN中所有和指定dnname或username相关的线程都会收到SIGTERM信号,相应的会话被强制关闭。 COORDINATOR ( nodename ,nodename ... } ) | NODE ( nodename , nodename ... ) | ALL 删除CN节点与指定节点的空闲/无效连接。有三种场景: COORDINATOR:删除CN到指定CN节点上的空闲/无效连接。 NODE:删除CN到指定DN节点上的空闲/无效连接。 ALL:删除CN到所有节点上的空闲/无效连接,包括CN和DN。 取值范围:可替换其中的nodename为已存在的节点名。 dbname 删除当前CN节点中指定数据库相关的连接。如果不指定该属性,则删除所有数据库相关的连接。 取值范围:系统中已存在数据库名称。 username 删除当前CN节点中指定用户相关连接。如果不指定,则删除所有用户相关的连接。 取值范围:已存在的用户。
  • 语法格式 CLEAN CONNECTION TO { COORDINATOR ( nodename [, ... ] ) | NODE ( nodename [, ... ] )| ALL [ CHECK ] [ FORCE ] } { FOR DATABASE dbname | TO USER username | FOR DATABASE dbname TO USER username };
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738 --创建数据库test_clean_connection。gaussdb=# CREATE DATABASE test_clean_connection;--创建jack用户。gaussdb=# CREATE USER jack PASSWORD '********';--在另一个会话用jack用户登录该数据库之后,通过视图查询到该连接信息。gaussdb=# SELECT datname,usename,application_name,waiting,state FROM pg_stat_activity WHERE datname = 'test_clean_connection'; datname | usename | application_name | waiting | state -----------------------+---------+------------------+---------+------- test_clean_connection | jack | gsql | f | idle(1 row)--此时直接删除数据库test_clean_connection会有如下报错:gaussdb=# DROP DATABASE test_clean_connection;ERROR: Database "test_clean_connection" is being accessed by other users. You can stop all connections by command: "clean connection to all force for database XXXX;" or wait for the sessions to end by querying view: "pg_stat_activity".DETAIL: There is 1 other session using the database.--删除登录数据库数据库test_clean_connection的当前CN节点与所有节点的连接。--如果不使用FORCE参数是无法删除stat状态为其他的状态的连接。gaussdb=# CLEAN CONNECTION TO ALL FORCE FOR DATABASE test_clean_connection;--查询登录数据库test_clean_connection的连接。gaussdb=# SELECT datname,usename,application_name,waiting,state FROM pg_stat_activity WHERE datname = 'test_clean_connection'; datname | usename | application_name | waiting | state ---------+---------+------------------+---------+-------(0 rows)--删除数据库test_clean_connection。gaussdb=# DROP DATABASE test_clean_connection;--删除用户jack。gaussdb=# DROP USER jack;
  • 注意事项 在非force模式下,该功能只清理数据库集群节点(CN/DN)之间的连接,不会影响客户端连接。 在非force模式下,该功能只清理CN中已缓存的空闲/无效的连接,正在使用的正常连接不做清理。在force模式下,该功能同时会强制清理正在使用的正常连接以及客户端连接。 可以通过查询PG_STAT_GET_POOLER_STATUS()函数查看缓存的连接,检验清理的效果。 建议只在数据库出现网络连接异常时执行此功能。 在force模式下,该功能会清理DN中指定数据库、指定用户的连接。若分布式DN存在无法清理的残留连接,建议运维通过pg_terminate_session函数来清理该无效会话。
共99354条