ALTER DATABASE
功能描述
修改数据库的属性,包括它的名称、所有者、连接数限制、对象隔离属性等。
注意事项
- 只有拥有数据库所有者权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。如果是非系统管理员,针对所要修改属性的不同,对其还有以下权限约束:
- 修改数据库名称,必须拥有CREATEDB权限。
- 修改数据库所有者,当前用户必须是该数据库的所有者,且拥有CREATEDB权限,并确保该用户是新所有者角色的成员。
- 修改数据库默认表空间,该用户必须是该数据库的所有者或系统管理员,且拥有新表空间的CREATE权限。该语法会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。
- 修改某个按数据库设置的相关参数,只有数据库所有者或者系统管理员可以改变这些设置。
- 修改某个数据库对象隔离属性,只有数据库所有者或者系统管理员可以执行此操作。
- 不能重命名当前使用的数据库,如果需要重新命名,必须连接至其他数据库上。
- 不支持修改现有数据库的兼容模式,只能在创建数据库时指定兼容模式,详情请参见CREATE DATABASE。
语法格式
- 修改数据库的最大连接数。
1 2
ALTER DATABASE database_name [ [ WITH ] CONNECTION LIMIT connlimit ];
- 修改数据库名称。
1 2
ALTER DATABASE database_name RENAME TO new_name;
若该数据库中有OBS冷热表,则不支持修改数据库名。
- 修改数据库所属者。
1 2
ALTER DATABASE database_name OWNER TO new_owner;
- 修改数据库默认表空间。
1 2
ALTER DATABASE database_name SET TABLESPACE new_tablespace;
修改数据库的表空间时不能修改为OBS表空间。
- 修改数据库指定会话参数值。
1 2
ALTER DATABASE database_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT };
- 数据库配置参数重置。
1 2
ALTER DATABASE database_name RESET { configuration_parameter | ALL };
- 修改数据库对象隔离属性。
1
ALTER DATABASE database_name [ WITH ] { ENABLE | DISABLE } PRIVATE OBJECT;
- 修改数据库的对象隔离属性时须连接至该数据库,否则无法更改。
- 新创建的数据库,对象隔离属性默认是关闭的。当开启数据库对象隔离属性后,普通用户只能查看有权访问的对象(表、函数、视图、字段等)。对象隔离特性对管理员用户不生效,当开启对象隔离特性后,管理员也可以查看到全量的数据库对象。
参数说明
参数 |
描述 |
取值范围 |
---|---|---|
database_name |
需要修改属性的数据库名称。 |
字符串,需符合标识符命名规范。 |
connlimit |
数据库可以接收的最大并发连接数(管理员用户连接除外)。 |
整数,建议填写1~50。 -1(缺省)表示没有限制。 |
new_name |
数据库的新名称。 |
字符串,需符合标识符命名规范。 |
new_owner |
数据库的新所有者。 |
字符串,有效的用户名。 |
configuration_parameter value |
将指定的数据库会话参数值设置为给定值。 |
字符串:
|
FROM CURRENT |
根据当前会话连接的数据库设置该参数的值。 |
- |
RESET configuration_parameter |
重置指定的数据库会话参数值。 |
- |
RESET ALL |
重置全部的数据库会话参数值。 修改的数据库会话参数值,将在下一次会话中生效。 |
- |
示例
创建数据库testdb和用户user1。
1
|
CREATE DATABASE testdb ENCODING 'UTF8' template = template0; |
1 2 |
DROP USER IF EXISTS user1; CREATE USER user1 PASSWORD '{Password}'; |
设置数据库testdb的连接数为10。
1
|
ALTER DATABASE testdb CONNECTION LIMIT= 10; |
将testdb名称改为testdb_1。
1
|
ALTER DATABASE testdb RENAME TO testdb_1; |
将数据库testdb_1的所属者修改为user1。
1
|
ALTER DATABASE testdb_1 OWNER TO user1; |
设置testdb_1的表空间为PG_DEFAULT。
1
|
ALTER DATABASE testdb_1 SET TABLESPACE PG_DEFAULT; |
关闭在数据库testdb_1上缺省的索引扫描。
1
|
ALTER DATABASE testdb_1 SET enable_indexscan TO off; |
重置enable_indexscan参数。
1
|
ALTER DATABASE testdb_1 RESET enable_indexscan; |