-
示例 --创建角色。
gaussdb=# CREATE ROLE bob PASSWORD '********';
--创建外部服务器。
gaussdb=# CREATE SERVER my_server FOREIGN DATA WRAPPER log_fdw;
--创建USER MAPPING。
gaussdb=# CREATE USER MAPPING FOR bob SERVER my_server OPTIONS (user 'bob', password '********');
--修改USER MAPPING。
gaussdb=# ALTER USER MAPPING FOR bob SERVER my_server OPTIONS (SET password '********');
--删除USER MAPPING。
gaussdb=# DROP USER MAPPING FOR bob SERVER my_server;
--删除外部服务器。
gaussdb=# DROP SERVER my_server;
--删除角色。
gaussdb=# DROP ROLE bob;
-
语法格式 ALTER USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }
SERVER server_name
OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] ); 在OPTIONS选项里,ADD、SET和DROP指定要执行的操作,未指定时默认为ADD操作。option和value为对应操作的参数及参数值。
-
参数说明 user_name 该映射的用户名。 CURRENT_USER和USER匹配当前用户的名称。PUBLIC被用来匹配系统中所有当前以及未来的用户名。 server_name 该用户映射的服务器名。 OPTIONS 为该用户映射更改选项。新选项会覆盖任何之前指定的选项。ADD、 SET和DROP指定要被执行的动作。如果没有显式地指定操作,将假定为ADD。选项名称必须为唯一,该服务器的外部数据包装器也会验证选项。 用户的密码会加密后保存到系统表PG_USER_MAPPING中,加密时需要使用usermapping.key.cipher和usermapping.key.rand作为加密密码文件和加密因子。首次使用前需要通过如下命令创建这两个文件,并将这两个文件放入各节点的$GAUSSHOME/bin目录,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入各节点对应目录下。 gs_ssh -c "gs_guc generate -o usermapping -S default -D $GAUSSHOME/bin" 其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。其他参数详见工具参考中gs_guc工具说明。
-
注意事项 当在OPTIONS中出现password选项时,需要保证
GaussDB 每个节点的$GAUSSHOME/bin目录下存在usermapping.key.cipher和usermapping.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到每个节点的$GAUSSHOME/bin目录下。具体操作请参考OPTIONS中的说明。 OPTIONS中的敏感字段(如password)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
-
参数说明 column_encryption_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,要符合标识符命名规范。 client_master_key_name 指定用于重加密该CEK的新的CMK,取值为:CMK对象名,该CMK对象由CREATE CLIENT MASTER KEY语法创建。与密钥轮转前指定的客户端主密钥不为同一密钥。 国密算法约束: 由于SM2、SM3、SM4等算法属于中国国家密码标准算法,为规避法律风险,需配套使用。如果轮转CEK前使用的CMK是国密算法,则轮转CEK指定的CMK仍必须使用国密算法。
-
语法格式 修改已存在行访问控制策略的名称。 1 ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name RENAME TO new_policy_name;
修改已存在行访问控制策略的指定用户、策略表达式。 1
2
3 ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name
[ TO { role_name | PUBLIC } [, ...] ]
[ USING ( using_expression ) ];
-
参数说明 name 已有外部数据封装的名称。 HANDLER handler_function 为外部数据封装指定一个新的处理函数。 NO HANDLER 这个参数用来指定外部数据封装不再拥有处理函数。 使用外部数据封装但没有handler的外表不能访问。 VALIDATOR validator_function 为外部数据封装指定一个新的验证函数。 根据新的验证器,外部数据封装器或依赖的服务器、 用户映射或外部表的已经存在的选项是有可能是无效的。用户在使用外部数据封装之前需要保证这些选项是正确的。 不过,ALTER FOREIGN DATA WRAPPER 命令中指定的任何选项都将使用新的验证函数检查。 NO VALIDATOR 这个用来指定外部数据封装不再有验证函数。 OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ] ) 修改外部数据封装的选项。 ADD, SET, 和 DROP 指定表现的动作。如果没有明确指定操作默认是ADD。选项名必须唯一。 使用外部数据封装验证函数时,名字和取值也会被验证。
-
示例 --创建一个外部数据封装dbi。
gaussdb=# CREATE FOREIGN DATA WRAPPER dbi OPTIONS (bar 'true');
--修改一个外部数据封装dbi,增加选项foo,删除bar。
gaussdb=# ALTER FOREIGN DATA WRAPPER dbi OPTIONS (ADD foo '1', DROP 'bar');
--修改外部数据封装dbi验证器为file_fdw_validator。
gaussdb=# ALTER FOREIGN DATA WRAPPER dbi VALIDATOR file_fdw_validator;
--修改外部数据封装dbi处理函数为file_fdw_handler。
gaussdb=# ALTER FOREIGN DATA WRAPPER dbi HANDLER file_fdw_handler;
-
语法格式 设置外部数据封装属性 ALTER FOREIGN DATA WRAPPER name
[ HANDLER handler_function | NO HANDLER ]
[ VALIDATOR validator_function | NO VALIDATOR ]
[ OPTIONS ( [ ADD | SET | DROP ] option ['value'] [, ... ]) ];
-
语法格式 重命名表空间的语法。 ALTER TABLESPACE tablespace_name
RENAME TO new_tablespace_name; 设置表空间所有者的语法。 ALTER TABLESPACE tablespace_name
OWNER TO new_owner; 设置表空间属性的语法。 ALTER TABLESPACE tablespace_name
SET ( { tablespace_option = value } [, ... ] ); 重置表空间属性的语法。 ALTER TABLESPACE tablespace_name
RESET ( { tablespace_option } [, ... ] ); 设置表空间限额的语法。 ALTER TABLESPACE tablespace_name
RESIZE MAXSIZE { UNLIMITED | 'space_size'};
-
参数说明 tablespace_name 要修改的表空间。 取值范围:已存在的表空间名。 new_tablespace_name 表空间的新名称,新名称不能以"PG_"开头。 取值范围:字符串,符合标识符命名规范。 new_owner 表空间的新所有者。 取值范围:已存在的用户名。 tablespace_option 设置或者重置表空间的参数。 取值范围: seq_page_cost:设置优化器计算一次顺序获取磁盘页面的开销。缺省为1.0。 random_page_cost:设置优化器计算一次非顺序获取磁盘页面的开销。缺省为4.0。 random_page_cost是相对于seq_page_cost的取值,等于或者小于seq_page_cost时毫无意义。 默认值为4.0的前提条件是,优化器采用索引来扫描表数据,并且表数据在cache中命中率可以90%左右。 如果表数据空间要比物理内存小,那么减小该值到一个适当水平;相反地,如果表数据在cache中命中率要低于90%,那么适当增大该值。 如果采用了类似于SSD的随机访问代价较小的存储器,可以适当减小该值,以反映真正的随机扫描代价。 value的取值范围:浮点类型的正数。 RESIZE MAXSIZE 重新设置表空间限额的数值。 取值范围: UNLIMITED,该表空间不设置限额。 由space_size来确定,其格式参考CREATE TABLESPACE。 若调整后的限额值比当前表空间实际使用的值要小,调整操作可以执行成功,后续用户需要将该表空间的使用值降低到新限额值之下,才能继续往该表空间中写入数据。
-
注意事项 只有表空间的所有者或者被赋予了表空间ALTER权限的用户有权限执行ALTER TABLESPACE命令,系统管理员默认拥有此权限。但要修改表空间的所有者,当前用户必须是该表空间的所有者或系统管理员,且该用户是new_owner角色的成员。 对行存表的ALTER TABLESPACE操作不支持在事务块中执行。 要修改表空间的所有者A为B,则A必须是B的直接或者间接成员。 如果new_owner与old_owner一致,此处不再校验当前执行操作的用户是否具有修改权限,而直接显示ALTER成功。
-
示例 重命名表空间。 --创建表空间。
gaussdb=# CREATE TABLESPACE tbs_data1 RELATIVE LOCATION 'tablespace1/tbs_data1';
--重命名表空间。
gaussdb=# ALTER TABLESPACE tbs_data1 RENAME TO tbs_data2;
--查询。
gaussdb=# \db tbs_data2
List of tablespaces
Name | Owner | Location
-----------+-------+-----------------------
tbs_data2 | omm | tablespace1/tbs_data1 设置表空间所有者。 --创建用户。
gaussdb=# CREATE USER test PASSWORD '********';
--修改表空间所有者。
gaussdb=# ALTER TABLESPACE tbs_data2 OWNER TO test;
--查看。
gaussdb=# \db tbs_data2
List of tablespaces
Name | Owner | Location
-----------+-------+-----------------------
tbs_data2 | test | tablespace1/tbs_data1
(1 row) 设置表空间属性。 --修改seq_page_cost的值。
gaussdb=# ALTER TABLESPACE tbs_data2 SET (seq_page_cost = 10);
--查看。
gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
spcname | spcowner | spcacl | spcoptions | spcmaxsize | relative
-----------+----------+--------+--------------------+------------+----------
tbs_data2 | 16778 | | {seq_page_cost=10} | | t
(1 row) 重置表空间属性。 --将seq_page_cost参数的值重置为缺省值。
gaussdb=# ALTER TABLESPACE tbs_data2 RESET (seq_page_cost);
--查看。
gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
spcname | spcowner | spcacl | spcoptions | spcmaxsize | relative
-----------+----------+--------+------------+------------+----------
tbs_data2 | 16778 | | | | t
(1 row) 设置表空间限额。 --设置表空间最大使用的空间。
gaussdb=# ALTER TABLESPACE tbs_data2 RESIZE MAXSIZE '10G';
--查看。
gaussdb=# SELECT * FROM pg_tablespace WHERE spcname = 'tbs_data2';
spcname | spcowner | spcacl | spcoptions | spcmaxsize | relative
-----------+----------+--------+------------+------------+----------
tbs_data2 | 16778 | | | 10485760 K | t
(1 row)
--删除表空间。
gaussdb=# DROP TABLESPACE tbs_data2;
--删除用户。
gaussdb=# DROP USER test;
-
示例 修改聚合函数的名称。 --创建自定义函数。
gaussdb=# CREATE OR REPLACE FUNCTION int_add(int,int)
RETURNS int AS $BODY$
DECLARE
BEGIN
RETURN $1 + $2;
END;
$BODY$ language plpgsql;
--创建聚合函数。
gaussdb=# CREATE AGGREGATE myavg (int)
(
sfunc = int_add,
stype = int,
initcond = '0'
);
--把一个接受int类型参数的聚合函数myavg重命名为my_average。
gaussdb=# ALTER AGGREGATE myavg(int) RENAME TO my_average;
-
参数说明 pdb_name PDB名称。 取值范围:字符串,要符合标识符命名规范。 OPEN 打开指定的PDB。PDB的OPEN操作对其数据库实例的启动,即仅当PDB开启时才提供服务。管理员可按需启用或停用一部分PDB。只有PDB处于开启状态时,才允许被连接。 只有在当前的资源计划中存在与PDB关联的资源计划指令时,才可以成功打开PDB。 CLOSE 关闭指定的PDB。当用户暂不需要使用PDB或者需要将其删除时,可以通过CLOSE操作停止PDB的服务。关闭后,无法连接到该PDB。数据库会对关闭的PDB进行最基本的常规维护,以保证系统整体的一致性。这些停用的PDB对系统开销可以忽略。如果执行该语句时,该PDB还存在业务连接,则将最多等待5秒,后续还存在则会导致关闭失败。 CLOSE IMMEDIATE 强制关闭指定的PDB。如果管理员无法主动断连PDB的业务连接,可以使用该选项主动清退PDB现有的业务连接,并关闭PDB。