ALTER DATABASE
功能描述
修改数据库的属性,包括它的名称、所有者、连接数限制、对象隔离属性等。
注意事项
-
只有数据库的所有者或者被授予了数据库ALTER权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。针对所要修改属性的不同,还有以下权限约束:
-
修改数据库名称,必须拥有CREATEDB权限。
-
修改数据库所有者,当前用户必须是该database的所有者或者系统管理员,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。
-
修改数据库默认表空间,必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。
-
不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。
语法格式
-
修改数据库的最大连接数。
ALTER DATABASE database_name
[ [ WITH ] CONNECTION LIMIT connlimit ]; -
修改数据库名称。
ALTER DATABASE database_name
RENAME TO new_name; -
修改数据库所属者。
ALTER DATABASE database_name
OWNER TO new_owner; -
修改数据库默认表空间。
ALTER DATABASE database_name
SET TABLESPACE new_tablespace; -
修改数据库指定会话参数值。
ALTER DATABASE database_name
SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; -
数据库配置参数重置。
ALTER DATABASE database_name RESET
{ configuration_parameter | ALL }; -
修改数据库对象隔离属性。
ALTER DATABASE database_name [ WITH ] { ENABLE | DISABLE } PRIVATE OBJECT;
说明:
-
修改数据库的对象隔离属性时须连接至该数据库,否则无法更改。
-
新创建的数据库,对象隔离属性默认是关闭的。当开启数据库对象隔离属性后,普通用户只能查看有权访问的对象(表、函数、视图、字段等)。对象隔离特性对管理员用户不生效,当开启对象隔离特性后,管理员也可以查看到全量的数据库对象。
参数说明
-
database_name
需要修改属性的数据库名称。
取值范围:字符串,要符合标识符的命名规范。
-
connlimit
数据库可以接收的最大并发连接数(管理员用户连接除外)。
取值范围:整数,建议填写1~50的整数。-1(缺省)表示没有限制。
-
new_name
数据库的新名称。
取值范围:字符串,要符合标识符的命名规范。
-
new_owner
数据库的新所有者。
取值范围:字符串,有效的用户名。
-
new_tablespace
数据库新的默认表空间,该表空间为数据库中已经存在的表空间。默认的表空间为pg_default。
取值范围:字符串,有效的表空间名。
-
configuration_parameter
value
把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。
取值范围:字符串,
-
DEFAULT
-
OFF
-
RESET
-
FROM CURRENT
根据当前会话连接的数据库设置该参数的值。
-
RESET configuration_parameter
重置指定的数据库会话参数值。
-
RESET ALL
重置全部的数据库会话参数值。
说明:
修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。
修改的数据库会话参数值,将在下一次会话中生效。
示例
--创建jim和tom用户。
openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';
openGauss=# CREATE USER tom PASSWORD 'xxxxxxxxx';
--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。
openGauss=# CREATE DATABASE music ENCODING 'GBK' template = template0;
--创建数据库music2,并指定所有者为jim。
openGauss=# CREATE DATABASE music2 OWNER jim;
--用模板template0创建数据库music3,并指定所有者为jim。
openGauss=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;
--设置music数据库的连接数为10。
openGauss=# ALTER DATABASE music CONNECTION LIMIT= 10;
--将music名称改为music4。
openGauss=# ALTER DATABASE music RENAME TO music4;
--将数据库music2的所属者改为tom。
openGauss=# ALTER DATABASE music2 OWNER TO tom;
--设置music3的表空间为PG_DEFAULT。
openGauss=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT;
--关闭在数据库music3上缺省的索引扫描。
openGauss=# ALTER DATABASE music3 SET enable_indexscan TO off;
--重置enable_indexscan参数。
openGauss=# ALTER DATABASE music3 RESET enable_indexscan;
--删除数据库。
openGauss=# DROP DATABASE music2;
openGauss=# DROP DATABASE music3;
openGauss=# DROP DATABASE music4;
--删除jim和tom用户。
openGauss=# DROP USER jim;
openGauss=# DROP USER tom;
--创建兼容TD格式的数据库。
openGauss=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'C';
--创建兼容A格式的数据库。
openGauss=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'A';
--删除兼容TD、A格式的数据库。
openGauss=# DROP DATABASE td_compatible_db;
openGauss=# DROP DATABASE ora_compatible_db;
优化建议
-
create database
事务中不支持创建database。
-
ENCODING LC_COLLATE LC_CTYPE
当新建数据库Encoding与模板数据库(SQL_ASCII)不匹配(为'GBK' /'UTF8'/'LATIN1'/'GB18030')时,必须指定template [=] template0。
发表评论