华为云用户手册

  • 修改表示例 重命名表。 gaussdb=# CREATE TABLE aa(c1 int, c2 int);gaussdb=# ALTER TABLE IF EXISTS aa RENAME TO test_alt1; 修改表所属模式。 --创建模式test_schema。gaussdb=# CREATE SCHEMA test_schema;--把表test_alt1的所属模式修改为test_schema。gaussdb=# ALTER TABLE test_alt1 SET SCHEMA test_schema;--查询表信息。gaussdb=# SELECT schemaname,tablename FROM pg_tables WHERE tablename = 'test_alt1'; schemaname | tablename -------------+----------- test_schema | test_alt1(1 row) 修改表的所有者。 --创建用户test_user。gaussdb=# CREATE USER test_user PASSWORD '********';--修改test_alt1表的所有者为test_user。gaussdb=# ALTER TABLE IF EXISTS test_schema.test_alt1 OWNER TO test_user;--查看。gaussdb=# SELECT tablename, schemaname, tableowner FROM pg_tables WHERE tablename = 'test_alt1'; tablename | schemaname | tableowner -----------+-------------+------------ test_alt1 | test_schema | test_user(1 row) 修改表的表空间。 --创建表空间tbs_data1。gaussdb=# CREATE TABLESPACE tbs_data1 RELATIVE LOCATION 'tablespace1/tbs_data1';--修改test_alt1表的空间为tbs_data1。gaussdb=# ALTER TABLE test_schema.test_alt1 SET TABLESPACE tbs_data1;--查看。gaussdb=# SELECT tablename, tablespace FROM pg_tables WHERE tablename = 'test_alt1'; tablename | tablespace -----------+------------ test_alt1 | tbs_data1(1 row)--创建表gaussdb=# CREATE TABLE test(c1 int, c2 int);--在线修改test表的空间为tbs_data1。gaussdb=# ALTER TABLE ONLINE test SET TABLESPACE tbs_data1;--查看。gaussdb=# SELECT tablename, tablespace FROM pg_tables WHERE tablename = 'test'; tablename | tablespace -----------+------------ test| tbs_data1(1 row)--删除。gaussdb=# DROP TABLE test ; gaussdb=# DROP TABLE test_schema.test_alt1; gaussdb=# DROP TABLESPACE tbs_data1; gaussdb=# DROP SCHEMA test_schema; gaussdb=# DROP USER test_user;
  • 语法格式 修改表的定义。 1 2 3 4 5 6 7 8 91011121314151617181920 ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } action [, ... ];ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] table_name ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] } [, ... ] );ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] table_name MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ... ] );ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] table_name RENAME [TO | AS | = ] new_table_name;RENAME {TABLE | TABLES} {table_name TO new_table_name} [, ... ];ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } RENAME [ COLUMN ] column_name TO new_column_name;ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } RENAME CONSTRAINT constraint_name TO new_constraint_name;ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] table_name SET SCHEMA new_schema;ALTER TABLE [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ] [ IF EXISTS ] table_name GSIWAITALL; 其中具体表操作ACTION可以是以下子句之一: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233 column_clause | ADD table_constraint [ NOT VALID ] | ADD table_constraint_using_index | VALIDATE CONSTRAINT constraint_name | DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] | DROP PRIMARY KEY | CLUSTER ON index_name | SET WITHOUT CLUSTER | SET ( {storage_parameter = value} [, ... ] ) | RESET ( storage_parameter [, ... ] ) | OWNER TO new_owner | SET TABLESPACE new_tablespace | TO { GROUP groupname | NODE ( nodename [, ... ] ) } | ADD NODE ( nodename [, ... ] ) | DELETE NODE ( nodename [, ... ] ) | UPDATE SLICE LIKE table_name | DISABLE TRIGGER [ trigger_name | ALL | USER ] | ENABLE TRIGGER [ trigger_name | ALL | USER ] | ENABLE REPLICA TRIGGER trigger_name | ENABLE ALWAYS TRIGGER trigger_name | ENABLE ROW LEVEL SECURITY | DISABLE ROW LEVEL SECURITY | FORCE ROW LEVEL SECURITY | NO FORCE ROW LEVEL SECURITY | REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING } | AUTO_INCREMENT [ = ] value | COMMENT [ = ] 'string' | [ [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset ] [ [ DEFAULT ] COLLATE [ = ] default_collation ] | ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] | [ MODIFY { PARTITION partition_name | SUBPARTITION subpartition_name }] ILM { ENABLE | DISABLE | DELETE } POLICY policy_name | [ MODIFY { PARTITION partition_name | SUBPARTITION subpartition_name }] ILM { ENABLE_ALL | DISABLE_ALL | DELETE_ALL} | htap_action [ ( { column_name [, ... ]} ) ] [ PRIORITY { HIGH | LOW | NONE } ] ADD table_constraint [ NOT VALID ] 给表增加一个新的约束。 ADD table_constraint_using_index 根据已有唯一索引为表增加主键约束或唯一约束。当指定索引为GSI时,将报错,需要使用BY GLOBAL INDEX语法添加GSI索引约束。 VALIDATE CONSTRAINT constraint_name 验证一个使用NOT VALID选项创建的检查类约束,通过扫描全表来保证所有记录都符合约束条件。如果约束已标记为有效时,什么操作也不会发生。 DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] 删除一个表上的约束。 DROP PRIMARY KEY 删除一个表上的主键约束。该语法仅在sql_compatibility='MYSQL'时有效。 CLUSTER ON index_name 为将来的CLUSTER(聚簇)操作选择默认索引。实际上并没有重新盘簇化处理该表。 SET WITHOUT CLUSTER 从表中删除最新使用的CLUSTER索引。这样会影响将来那些没有声明索引的CLUSTER(聚簇)操作。 SET ( {storage_parameter = value} [, ... ] ) 修改表的一个或多个存储参数。当table_name为索引名时,ACTIVE_PAGES表示索引的页面数量,可能比实际的物理文件页面少,可以用于优化器调优。目前只对Ustore的分区表LOCAL索引生效,且会被VACUUM、ANALYZE更新(包括AUTO VACUUM)。不建议用户手动设置该参数,该参数在分布式下无效。 RESET ( storage_parameter [, ... ] ) 重置表的一个或多个存储参数。与SET一样,根据参数的不同可能需要重写表才能获得想要的效果。 OWNER TO new_owner 将表、序列、视图的属主改变成指定的用户。 SET TABLESPACE new_tablespace 这种形式将表空间修改为指定的表空间并将相关的数据文件移动到新的表空间。但是表上的所有索引都不会被移动,索引可以通过ALTER INDEX语法的SET TABLESPACE选项来修改索引的表空间。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } 此语法仅在扩展模式(GUC参数support_extended_features为on时)下可用。该模式谨慎打开,主要供内部扩容工具使用,一般用户不应使用该模式。该命令只会修改表分布节点的逻辑映射关系,并未真正在DN节点上迁移表的元数据和数据。 ADD NODE ( nodename [, ... ] ) 此语法主要供内部扩容工具使用,一般用户不建议使用。 DELETE NODE ( nodename [, ... ] ) 此语法主要供内部缩容工具使用,一般用户不建议使用。 UPDATE SLICE LIKE table_name 此语法主要供内部扩缩容工具使用,一般用户不可以使用。 DISABLE TRIGGER [ trigger_name | ALL | USER ] 禁用trigger_name所表示的单个触发器,或禁用所有触发器,或仅禁用用户触发器(此选项不包括内部生成的约束触发器,例如,可延迟唯一性和排除约束的约束触发器)。 应谨慎使用此功能,因为如果不执行触发器,则无法保证原先期望的约束的完整性。 | ENABLE TRIGGER [ trigger_name | ALL | USER ] 启用trigger_name所表示的单个触发器,或启用所有触发器,或仅启用用户触发器。 | ENABLE REPLICA TRIGGER trigger_name 触发器触发机制受配置变量session_replication_role的影响,当复制角色为“origin”(默认值)或“local”时,将触发简单启用的触发器。 配置为ENABLE REPLICA的触发器仅在会话处于“replica”模式时触发。 | ENABLE ALWAYS TRIGGER trigger_name 无论当前复制模式如何,配置为ENABLE ALWAYS的触发器都将触发。 | { DISABLE | ENABLE } [ REPLICA | ALWAYS ] RULE 配置属于表的重写规则,已禁用的规则对系统来说仍然是可见的,只是在查询重写期间不被应用。语义为关闭/启动规则。由于关系到视图的实现,ON SELECT规则不可禁用。 配置为ENABLE REPLICA的规则将会仅在会话为“replica” 模式时启动,而配置为ENABLE ALWAYS的触发器将总是会启动,不考虑当前复制模式。规则触发机制也受配置变量session_replication_role的影响,类似于上述触发器。 | { DISABLE | ENABLE } ROW LEVEL SECURITY 开启或关闭表的行访问控制开关。 当开启行访问控制开关时,如果未在该数据表定义相关行访问控制策略,数据表的行级访问将不受影响;如果关闭表的行访问控制开关,即使定义了行访问控制策略,数据表的行访问也不受影响。详细信息参见CREATE ROW LEVEL SECURITY POLICY章节。 | {NO FORCE|FORCE} ROW LEVEL SECURITY 强制开启或关闭表的行访问控制开关。 默认情况,表所有者不受行访问控制特性影响,但当强制开启表的行访问控制开关时,表的所有者(不包含系统管理员用户)会受影响。系统管理员可以绕过所有的行访问控制策略,不受影响。 REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING } 在逻辑复制场景下,指定该表的UPDATE和DELETE操作中旧元组的记录级别。 DEFAULT记录主键的列的旧值,没有主键则不记录。 USING INDEX记录命名索引覆盖的列的旧值,这些值必须是唯一的、不局部的、不可延迟的,并且仅包括标记为NOT NULL的列。 FULL记录该行中所有列的旧值。 NOTHING不记录有关旧行的信息。 在逻辑复制场景,解析该表的UPDATE和DELETE操作语句时,以此方法记录的信息组成解析出的旧元组。对于有主键表该选项可设置为DEFAULT或FULL。对于无主键表该选项需设置为FULL,否则解码时旧元组将解析为空。一般场景不建议设置为NOTHING,旧元组会始终解析为空。 针对ustore表,选项NOTHING无效,实际效果等同于FULL;DEFAULT没有主键时,记录该行所有列。 AUTO_INCREMENT [ = ] value 设置自动增长列下一次的自增值。设置的值只有大于当前自增计数器时才会生效。 value必须是非负数,且不得大于2127-1。 此子句仅在参数sql_compatibility='MYSQL'时生效。 [ [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset ] [ [ DEFAULT ] COLLATE [ = ] default_collation ] 修改表的默认字符集和默认字符序为指定的值。修改不会影响表中当前已经存在的列。 ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] 在表上追加一个ILM策略,一个完整的ILM策略由两部分构成,ILM动作和ILM条件。ILM动作用于定义具体的数据压缩或移动行为,ILM条件用于定义数据满足什么条件时会触发ILM动作,ILM条件为行级条件,即ILM条件作用于堆表中的每一行,当前行一段时间内未发生修改时,会满足ILM条件,从而触发ILM动作。EXPR仅支持表字段及类型基础操作函数(to_date,substr等)。 [ MODIFY { PARTITION partition_name | SUBPARTITION subpartition_name }] ILM { ENABLE | DISABLE | DELETE } POLICY policy_name 修改表(分区或子分区)的单个ILM策略,policy_name是系统视图GS_ADM_ILMOBJE CTS 或GS_MY_ILMOBJECTS查询得到的POLICY_NAME。 [ MODIFY { PARTITION partition_name | SUBPARTITION subpartition_name }] ILM { ENABLE_ALL | DISABLE_ALL | DELETE_ALL} 修改表(分区或子分区)的所有ILM策略。 其中列相关的操作column_clause可以是以下子句之一: 1 2 3 4 5 6 7 8 9101112131415 ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ CHARACTER SET | CHARSET charset ] [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]| MODIFY column_name data_type| MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ]| MODIFY column_name [ CONSTRAINT constraint_name ] NULL| MODIFY column_name data_type { { [ COMMENT 'string' ] [ ... ] }| DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]| ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]| ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT }| ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL| ALTER [ COLUMN ] column_name SET STATIS TICS [PERCENT] integer| ADD STATISTI CS (( column_1_name, column_2_name [, ...] ))| DELETE STATISTICS (( column_1_name, column_2_name [, ...] ))| ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] )| ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )| ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ CHARACTER SET | CHARSET [ = ] charset ] [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] 向表中增加一个新的字段。用ADD COLUMN增加一个字段,所有表中现有行都初始化为该字段的缺省值(如果没有声明DEFAULT子句,值为NULL)。如果指定IF NOT EXISTS关键字,如果存在相同名称的列,返回NOTICE提示,告知列已存在。未指定IF NOT EXISTS关键字时,如果存在相同名称的列,返回ERROR报错。 ADD ( { column_name data_type [ compress_mode ] } [, ...] ) 向表中增加多列。 MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] ) 修改表已存在字段的数据类型。此命令会导致该字段的统计信息清空,建议在修改后重新收集该列的统计信息。 MODIFY column_name data_type { { [ COMMENT 'string' ] [ ... ] } 修改表格已存在字段的定义,用新的定义替换字段的原定义,原字段上的索引、独立对象约束(例如:主键、唯一键、CHECK约束等)不会被删除。 此语法只能在MYSQL模式数据库下(即sql_compatibility = 'MYSQL')使用。 此语法不支持外表、修改加密字段。 不支持修改分区键字段的数据类型和排序规则,不支持修改规则引用的字段的数据类型和排序规则,不支持修改物化视图引用的字段的数据类型和排序规则。 被修改数据类型或排序规则的字段如果被一个生成列引用,那么这个生成列的数据将会重新生成。 被修改字段若被一些对象依赖(如:索引、独立对象约束、视图、触发器、行级访问控制策略等),修改字段过程中将会重建这些对象。若被修改后字段定义违反此类对象的约束,修改操作会失败,如:修改作为视图结果列的字段的数据类型。请修改字段前评估这类影响。 HASH、LIST、RANGE分布场景下不支持修改分布列数据类型和其注释。 被修改字段若被一些对象调用(如:自定义函数、存储过程等),修改字段不会处理这些对象。修改字段后,这些对象有可能出现不可用的情况,请修改字段前评估这类影响。 此子句与上一子句中“MODIFY column_name data_type”部分语法相同,语义功能不同,当GUC参数b_format_behavior_compat_options含有‘enable_modify_column’选项时,将按照此子句功能处理。 此命令会导致该字段的统计信息清空,建议在修改后重新收集该列的统计信息。 DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] 从表中删除一个字段,和这个字段相关的索引和表约束也会被自动删除。如果任何表之外的对象依赖于这个字段,必须声明CASCADE ,比如视图等。 DROP COLUMN命令并不是物理上把字段删除,而只是简单地把它标记为对SQL操作不可见。随后对该表的插入和更新将在该字段存储一个NULL。因此,删除一个字段是很快的,但是它不会立即释放表在磁盘上的空间,因为被删除了的字段占据的空间还没有回收。这些空间将在执行VACUUM时而得到回收。 ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ] 改变表字段的数据类型。该字段涉及的索引和简单的表约束将被自动地转换为使用新的字段类型,方法是重新分析最初提供的表达式。 当字段的原始数据类型和修改后的数据类型二进制兼容时,执行该语句不需要对整表进行重写,其他场景下会进行整表重写。原类型和目标类型是否二进制兼容可以在PG_CAST系统表中查看,如果castmethod为‘b’则二进制兼容。例如源表中数据类型是text类型,如果转为int类型则会触发表重写,转为clob类型则不会触发表重写。如果表重写被触发,该表上被删除的空间也将被立刻回收。 此命令会导致该字段的统计信息清空,建议在修改后重新收集该列的统计信息。 ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT } 为一个字段设置或者删除缺省值。请注意缺省值只应用于随后的INSERT命令,它们不会修改表中已经存在的行。也可以为视图创建缺省,这个时候它们是在视图的ON INSERT规则应用之前插入到INSERT句中的。 ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL 修改一个字段是否允许NULL值或者拒绝NULL值。如果表在字段中包含非NULL,则只能使用SET NOT NULL。 ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer 为随后的ANALYZE操作设置针对每个字段的统计收集目标。目标的范围可以在0到10000之内设置。设置为-1时表示重新恢复到使用系统缺省的统计目标。 {ADD | DELETE} STATISTICS ((column_1_name, column_2_name [, ...])) 用于添加和删除多列统计信息声明(不实际进行多列统计信息收集),以便在后续进行全表或全库analyze时进行多列统计信息收集。每组多列统计信息最多支持32列。不支持添加/删除多列统计信息声明的表:系统表、外表。 ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] ) ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] ) 设置/重置属性选项。 目前,属性选项只定义了n_distinct和n_distinct_inherited。n_distinct影响表本身的统计值,而n_distinct_inherited影响表及其继承子表的统计。目前,只支持SET/RESET n_distinct参数,禁止SET/RESET n_distinct_inherited参数。 ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } 为一个字段设置存储模式。这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。SET STORAGE本身并不改变表上的任何东西,只是设置将来的表操作时,建议使用的策略。 其中列约束column_constraint为: 1 2 3 4 5 6 7 8 91011121314151617 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | ON UPDATE update_expr | GENERATED ALWAYS AS ( generation_expr ) [STORED] | AUTO_INCREMENT | COMMENT 'string' | COLVIEW | NOCOLVIEW | UNIQUE [KEY] index_parameters | PRIMARY KEY index_parameters | ENCRYPTED WITH ( COLUMN_ENCRYPTION_KEY = column_encryption_key, ENCRYPTION_TYPE = encryption_type_value ) | REFEREN CES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中htap_action为: COLVIEW | COLVIEW NOCOLVIEW | NOCOLVIEW | NOCOLVIEW COLVIEW 其中索引参数index_parameters为: 12 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ] 其中update_expr为: { CURRENT_TIMESTAMP | LOCALTIMESTAMP | NOW() } 其中列的压缩可选项compress_mode为: 1 { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS } 其中根据已有唯一索引为表增加主键约束或唯一约束table_constraint_using_index为: 123 [ CONSTRAINT constraint_name ] { UNIQUE | PRIMARY KEY } USING INDEX index_name [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中表约束table_constraint为: 1234567 [ CONSTRAINT [ constraint_name ] ] { CHECK ( expression ) | UNIQUE [ idx_name ] [ USING method ] ( { { column_name [ ( length ) ] | ( expression ) } [ ASC | DESC ] } [, ... ] ) index_parameters | PRIMARY KEY [ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | FOREIGN KEY [ idx_name ] ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ENFORCED ] { [ COMMENT 'string' ] [ ... ] } NOT ENFORCED语法表示创建的约束为信息约束,即数据库只记录该约束信息而并不对数据进行强制约束,主要用于为优化器提供优化所需信息。目前仅支持UNIQUE KEY、PRIMARY KEY以及FOREIGN KEY。 其中索引参数index_parameters为: 12 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ][BY GLOBAL INDEX] 当index_parameters指定BY GLOBAL INDEX时,将使用全局二级索引建立约束。
  • 注意事项 基表为HASH分布时,若创建不包含基表分布键的主键或唯一索引,需要使用全局二级索引(指定BY GLOBAL INDEX字段),若创建包含基表分布键的主键或唯一索引,需要使用普通索引(不指定BY GLOBAL INDEX字段),单DN部署形式下,使用全局二级索引或者普通索引均可创建成功;当基表为除HASH分布以外的其他分布形式时,主键或唯一索引只能使用普通索引,即索引键必须包含基表分布键。 表的所有者、被授予了表ALTER权限的用户或被授予ALTER ANY TABLE权限的用户有权限执行ALTER TABLE命令,系统管理员默认拥有此权限。但要修改表的所有者或者修改表的模式,当前用户必须是该表的所有者或者系统管理员,且该用户是新所有者角色的成员。 不能修改分区表的TABLESPACE,但可以修改分区的TABLESPACE。 不支持修改存储参数ORIENTATION。 SET SCHEMA操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。 不允许对表的分布列(distribute column)进行修改。 不支持对分区表的分区键字段改变和转换字符集。
  • 示例 开启事务。 --建表并插入数据。gaussdb=# CREATE TABLE tbl_test1(col1 int, col2 int);gaussdb=# INSERT INTO tbl_test1 VALUES (1,1), (2,2), (3,3);--以默认方式启动事务。gaussdb=# BEGIN;INSERT INTO tbl_test1 VALUES (4,4);END;--以隔离级别为REPEATABLE READ方式启动事务。gaussdb=# BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT * FROM tbl_test1; END;--删除表。gaussdb=# DROP TABLE tbl_test1; 匿名块。 12345 --使用匿名块输出字符串。gaussdb=# BEGINdbe_output.print_line('Hello');END;/
  • 参数说明 declare_statements 声明变量,包括变量名和变量类型,如“sales_cnt int”。 execution_statements 匿名块中要执行的语句。 取值范围:已存在的函数名称。 WORK | TRANSACTION BEGIN语法格式中的可选关键字,没有实际作用。 ISOLATION LEVEL 指定事务隔离级别,它决定当一个事务中存在其他并发运行事务时它能够看到什么数据。 在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,指定后的行为和READ COMMITTED行为一致。 REPEATABLE READ:可重复读隔离级别,仅仅看到事务开始之前提交的数据,它不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:目前功能上不支持此隔离级别,设置该隔离级别时,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • 语法格式 开启匿名块。 12345 [DECLARE [declare_statements]] BEGINexecution_statements END;/ 开启事务。 1234567 BEGIN [ WORK | TRANSACTION ] [ { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } } [, ...] ];
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536 --创建SCHEMA。gaussdb=# CREATE SCHEMA tpcds;--创建表。gaussdb=# CREATE TABLE tpcds.customer_demographics_t2( CD_DEMO_SK INTEGER NOT NULL, CD_GENDER CHAR(1) , CD_MARITAL_STATUS CHAR(1) , CD_EDUCATION_STATUS CHAR(20) , CD_PURCHASE_ESTIMATE INTEGER , CD_CREDIT_RATING CHAR(10) , CD_DEP_COUNT INTEGER , CD_DEP_EMPLOYED_COUNT INTEGER , CD_DEP_COLLEGE_COUNT INTEGER)DISTRIBUTE BY HASH (CD_DEMO_SK);--开启事务。 gaussdb=# START TRANSACTION;--插入数据。gaussdb=# INSERT INTO tpcds.customer_demographics_t2 VALUES(1,'M', 'U', 'DOCTOR DEGREE', 1200, 'GOOD', 1, 0, 0);gaussdb=# INSERT INTO tpcds.customer_demographics_t2 VALUES(2,'F', 'U', 'MASTER DEGREE', 300, 'BAD', 1, 0, 0);--提交事务,让所有更改永久化。gaussdb=# COMMIT;--查询数据。gaussdb=# SELECT * FROM tpcds.customer_demographics_t2;--删除表tpcds.customer_demographics_t2。gaussdb=# DROP TABLE tpcds.customer_demographics_t2;--删除SCHEMA。gaussdb=# DROP SCHEMA tpcds;
  • 示例 --创建角色test_role。gaussdb=# CREATE ROLE test_role PASSWORD '********'; --设置角色test_role可以登录数据库。gaussdb=# ALTER ROLE test_role WITH LOG IN;--创建数据库。gaussdb=# CREATE DATABASE testdb1;--锁定角色test_role。gaussdb=# ALTER ROLE test_role ACCOUNT LOCK;--给锁定锁定的角色解锁。gaussdb=# ALTER ROLE test_role ACCOUNT UNLOCK;--修改角色test_role密码。gaussdb=# ALTER ROLE test_role PASSWORD '********';--将角色test_role重命名为test_role2。gaussdb=# ALTER ROLE test_role RENAME TO test_role2;--修改角色test_role2为系统管理员。gaussdb=# ALTER ROLE test_role2 SYSADMIN;--删除。gaussdb=# DROP ROLE test_role2;gaussdb=# DROP DATABASE testdb1;
  • 参数说明 role_name 现有角色名。 取值范围:已存在的角色名,如果角色名中包含大写字母则需要使用双引号括起来。 IN DATABASE database_name 表示修改角色在指定数据库上的参数。 SET configuration_parameter {{ TO | = } { value | DEFAULT } | FROM CURRENT} 设置角色的参数。ALTER ROLE中修改的会话参数只针对指定的角色,且在下一次该角色启动的会话中有效。 当前版本不支持设置用户级别参数。 取值范围: configuration_parameter和value的取值请参见SET。 DEFAULT:表示清除configuration_parameter参数的值,configuration_parameter参数的值将继承本角色新产生的SESSION的默认值。 FROM CURRENT:取当前会话中的值设置为configuration_parameter参数的值。 RESET {configuration_parameter|ALL} 清除configuration_parameter参数的值。与SET configuration_parameter TO DEFAULT的效果相同。 当前版本不支持重置用户级别参数。 取值范围:ALL表示清除所有参数的值。 ACCOUNT LOCK | ACCOUNT UNLOCK ACCOUNT LOCK:锁定账户,禁止登录数据库。 ACCOUNT UNLOCK:解锁账户,允许登录数据库。 PGUSER 当前版本不允许修改角色的PGUSER属性。 {PASSWORD|IDENTIFIED BY} 'password' 重置或修改用户密码。除了初始用户外其他管理员或普通用户修改自己的密码需要输入正确的旧密码。只有初始用户、三权分立关闭时的系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以重置普通用户密码,无需输入旧密码。初始用户可以重置系统管理员的密码,系统管理员不允许重置其他系统管理员的密码。 EXPIRED 设置密码失效。只有初始用户、系统管理员(sysadmin)或拥有创建用户(CREATEROLE)权限的用户才可以设置用户密码失效,其中系统管理员只有在三权分立关闭时,才可以设置自己或其他系统管理员密码失效。不允许设置初始用户密码失效。 密码失效的用户可以登录数据库但不能执行查询操作,只有修改密码或由管理员重置密码后才可以恢复正常查询操作。 其他参数请参见CREATE ROLE的参数说明。
  • 语法格式 修改角色的权限。 1 ALTER ROLE role_name [ [ WITH ] option [ ... ] ]; 其中权限项子句option为: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526 {CREATEDB | NOCREATEDB} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {AUDITADMIN | NOAUDITADMIN} | {SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {USEFT | NOUSEFT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' [EXPIRED] | DISABLE | EXPIRED } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' | EXPIRED ] | DISABLE } | 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 | ACCOUNT { LOCK | UNLOCK } | PGUSER 修改角色的名称。 12 ALTER ROLE role_name RENAME TO new_name;
  • 注意事项 只有系统管理员或者被授予了NODE GROUP的ALTER权限的用户可以修改NODE GROUP信息。 修改NODE GROUP操作都是系统内部操作,除了SET DEFAULT语法之外,其他操作都需要在维护模式下(调用SET xc_maintenance_mode=on;)。 ALTER NODE GROUP语法仅仅应该在数据库内部使用,使用者不应该手动调用这些SQL语句,否则会导致数据库系统数据不一致。
  • 语法格式 123456789 ALTER NODE GROUP groupname{ SET DEFAULT | RENAME TO new_group_name | SET TABLE GROUP new_group_name | COPY BUCKETS FROM src_group_name | ADD NODE ( nodename [, ... ] ) | DELETE NODE ( nodename [, ... ] ) | RESIZE TO dest_group_name};
  • 示例 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 --创建系统管理员用户。gaussdb=# CREATE USER sysadmin WITH SYSADMIN PASSWORD '********';--切换管理员用户。gaussdb=# \c - sysadmin--创建同义词t1。gaussdb=# CREATE OR REPLACE SYNONYM t1 FOR ot.t1;--创建新用户u1。gaussdb=# CREATE USER u1 PASSWORD '********';--给新用户赋权限。gaussdb=# GRANT ALL ON SCHEMA sysadmin TO u1;--修改同义词t1的owner为u1。gaussdb=# ALTER SYNONYM t1 OWNER TO u1;--删除同义词t1。gaussdb=# DROP SYNONYM t1;--收回用户u1权限。gaussdb=# REVOKE ALL ON SCHEMA sysadmin FROM u1;--删除用户u1。gaussdb=# DROP USER u1;--切换到初始用户init_user,请使用真实的初始用户名称替换init_user。gaussdb=# \c - init_user--删除用户sysadmin。gaussdb=# DROP USER sysadmin;
  • 参数说明 groupname 需要修改的NODE GROUP名称。 取值范围:字符串,要符合标识符命名规范。 SET DEFAULT 将系统中除了groupname指定的NODE GROUP之外的其他NODE GROUP对象的in_redistribution字段设置为'y'。考虑到兼容以前版本,该语法仍然保留,且不需要设置维护模式。 RENAME TO new_group_name 将groupname指定的NODE GROUP的名称修改为new_group_name。 SET TABLE GROUP new_group_name 将所有CN节点的pgxc_class表中pgroup字段是group_name的记录修改为new_group_name。 COPY BUCKETS FROM src_group_name 从src_group_name表示的NODE GROUP中,将group_members字段和group_buckets字段的内容复制到groupname所表示的NODE GROUP中。 ADD NODE ( nodename [, ... ] ) 从groupname指定的NODE GROUP中增加指定的节点,这些新增节点在PGXC_NODE系统表中存在。该语句仅仅修改系统表,不会进行实际的节点添加和数据重分布,用户不应该直接调用该SQL语句。可以在PGXC_GROUP系统表中观察该语句的影响。 DELETE NODE ( nodename [, ... ] ) 从groupname指定的NODE GROUP中,将指定的节点移除,这些被移除的节点仍然存在于PGXC_NODE系统表中。该语句仅仅修改系统表,不会进行实际的节点移除和数据重分布,用户不应该直接调用该SQL语句。可以在PGXC_GROUP系统表中观察该语句的影响。 RESIZE TO dest_group_name 设置集群resize操作标志,将groupname所表示的NODE GROUP设置为重分布的源NODE GROUP,并取消is_installation标志;同时将desst_group_name设置为重分布的目的NODE GROUP,并设置is_installation标志。
  • 示例 --查询集群DN初始状态。gaussdb=# SELECT node_name, nodeis_preferred FROM pgxc_node WHERE node_type = 'D' ORDER BY 1; node_name | nodeis_preferred-----------+------------------ dn_6001_6002_6003 | f dn_6004_6005_6006 | f dn_6007_6008_6009 | f(3 rows)--创建NODE GROUP,用上一步中查询到的真实节点名称替换dn_6001_6002_6003。gaussdb=# CREATE NODE GROUP test_group WITH ( dn_6001_6002_6003 );--修改创建出的NODE GROUP名称为test_group_new。需要在维护模式下(调用SET xc_maintenance_mode=on;)。gaussdb=# SET xc_maintenance_mode=on;gaussdb=# ALTER NODE GROUP test_group RENAME TO test_group_new;--查询NODE GROUP。gaussdb=# SELECT group_name, group_members FROM pgxc_group; group_name | group_members ----------------+------------------- group_version1 | 16384 16388 16394 test_group_new | 16384(2 rows)--删除NODE GROUP,且关闭维护模式。gaussdb=# DROP NODE GROUP test_group_new;gaussdb=# SET xc_maintenance_mode=off;
  • 示例 1 2 3 4 5 6 7 8 91011121314 --开始。gaussdb=# BEGIN;--准备标识符为的trans_test的事务。gaussdb=# PREPARE TRANSACTION 'trans_test';--创建表。gaussdb=# CREATE TABLE item1(id int);--提交标识符为的trans_test的事务。gaussdb=# COMMIT PREPARED 'trans_test';--删除表。gaussdb=# DROP TABLE item1;
  • 语法格式 修改用户的权限等信息。 1234567 ALTER USER user_name [ [ WITH ] option [ ... ] ];ALTER USER user_name RENAME TO new_name;ALTER USER user_name [ IN DATABASE database_name ] SET configuration_parameter {{ TO | = } { value | DEFAULT }|FROM CURRENT};ALTER USER user_name [ IN DATABASE database_name ] RESET {configuration_parameter|ALL}; 其中option子句为。 1 2 3 4 5 6 7 8 910111213141516171819202122232425 { CREATEDB | NOCREATEDB } | { CREATEROLE | NOCREATEROLE } | { INHERIT | NOINHERIT } | { AUDITADMIN | NOAUDITADMIN } | { SYSADMIN | NOSYSADMIN } | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | { USEFT | NOUSEFT } | { LOGIN | NOLOGIN } | { REPLICATION | NOREPLICATION } | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' [EXPIRED] | DISABLE | EXPIRED } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' | EXPIRED ] | DISABLE } | 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 | ACCOUNT { LOCK | UNLOCK } | PGUSER 修改用户名。 12 ALTER USER user_name RENAME TO new_name;
  • 示例 --创建用户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';
  • 示例 --建表。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;
  • 注意事项 每个对象只存储一条注释,因此要修改一个注释,对同一个对象发出一条新的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 注释。
  • 注意事项 审计策略的创建与维护有权限限制,只有poladmin、sysadmin或初始用户有权限进行此操作。 在创建审计策略之前,需要确保已经开启安全策略开关,即设置GUC参数“enable_security_policy=on”后,脱敏策略才会生效。 系统管理员或安全策略管理员可以访问GS_AUDITING_POLICY、GS_AUDITING_POLICY_ACCESS、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 [, ... ] ) ]
  • 示例 创建一个对数据库执行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;
  • 参数说明 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。
共99315条