更新时间:2022-08-16 GMT+08:00

ALTER DATABASE

功能描述

修改数据库的属性,包括它的名称、所有者、连接数限制、对象隔离属性等。

注意事项

  • 只有拥有数据库所有者权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。如果是非系统管理员,针对所要修改属性的不同,对其还有以下权限约束:
    • 修改数据库名称,必须拥有CREATEDB权限。
    • 修改数据库所有者,当前用户必须是该database的所有者,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。
    • 修改数据库默认表空间,该用户必须是该database的所有者或系统管理员,必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。
    • 修改某个按数据库设置的相关参数,只有数据库所有者或者系统管理员可以改变这些设置。
    • 修改某个数据库对象隔离属性,只有数据库所有者或者系统管理员可以执行此操作。
  • 不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。

语法格式

  • 修改数据库的最大连接数。
    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

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

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

示例

修改数据库music的连接数:

1
ALTER DATABASE music CONNECTION LIMIT= 10;

修改数据库music的名称为music1:

1
ALTER DATABASE music RENAME TO music1;

修改数据库music1所有者:

1
ALTER DATABASE music1 OWNER TO tom;

修改数据库music1的表空间:

1
ALTER DATABASE music1 SET TABLESPACE PG_DEFAULT;

关闭在数据库music1上缺省的索引扫描:

1
ALTER DATABASE music1 SET enable_indexscan TO off;

重置数据库music1的enable_indexscan参数:

1
ALTER DATABASE music1 RESET enable_indexscan;