更新时间:2024-11-27 GMT+08:00

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

    把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。

    取值范围:字符串,

    • DEFAULT
    • OFF
    • RESET
  • FROM CURRENT

    根据当前会话连接的数据库设置该参数的值。

  • RESET configuration_parameter

    重置指定的数据库会话参数值。

  • RESET ALL

    重置全部的数据库会话参数值。

  • 修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。
  • 修改的数据库会话参数值,将在下一次会话中生效。

示例

创建示例数据库testdb和用户tom:

1
CREATE DATABASE testdb ENCODING 'UTF8' template = template0;
1
2
DROP USER IF EXISTS tom;
CREATE USER tom PASSWORD '{Password}';

设置testdb数据库的连接数为10:

1
ALTER DATABASE testdb CONNECTION LIMIT= 10;

将testdb名称改为testdb_1:

1
ALTER DATABASE testdb RENAME TO testdb_1;

将数据库testdb_1的所属者改为tom:

1
ALTER DATABASE testdb_1 OWNER TO tom;

设置music1的表空间为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;