ALTER DATABASE

From PostgreSQL wiki
Jump to navigationJump to search
名字

ALTER DATABASE -- 修改一个数据库

语法概要
   ALTER DATABASE name [ [ WITH ] option [ ... ] ]
   
   where option can be:
   
       CONNECTION LIMIT connlimit
   
   ALTER DATABASE name RENAME TO new_name
   
   ALTER DATABASE name OWNER TO new_owner
   
   ALTER DATABASE name SET TABLESPACE new_tablespace
   
   ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }
   ALTER DATABASE name SET configuration_parameter FROM CURRENT
   ALTER DATABASE name RESET configuration_parameter
   ALTER DATABASE name RESET ALL
描述

ALTER DATABASE 改变一个数据库的属性。

第一种命令形式修改数据库各自的设置。(见下文获取细节。) 只有数据库所有者或者超级用户可以改变这些设置。

第二种命令形式修改数据库名字。只有数据库所有者或者超级用户可以重命名一个数据库;非超级用户必须拥有 CREATEDB 权限。 当前的数据库不能被重命名。(如果你需要这么做,那么连接至另外一个数据库。)

第三种命令形式修改数据库的所有者。要改变所有者,你必须已经是该数据库的所有者并且是新的所有权角色的直接或者间接成员, 并且还必须有 CREATEDB 权限。(请注意,超级用户自动拥有所有这些权限。)

第四种命令形式修改数据库的缺省表空间。只有数据库所有者或超级用户可以这样做;你也必须在新的表空间中具备create权限。这条命令物理上将数据库的所有表和索引从原先的表空间移动到新的表空间。值得注意的是,这个操作对非缺省表空间中的表和索引并不起作用。

其余的命令形式修改 PostgreSQL 数据库会话缺省的运行时配置变量。 一旦变量修改,建立新会话的时候就会使用这些修改后的值作为缺省值。数据库特定设置的优先级比在postgresql.conf中进行的或从postgres命令行接收的设置更高,前者会覆盖后两者。只有数据库所有者或者超级用户可以改变会话的缺省设置。有些变量不能用这种方法设置,或者是只能由超级用户设置。

参数
name
需要修改属性的数据库的名字。
connlimit
对这个数据库可以做多少个并发连接。-1 意味着没有限制。
new_name
数据库的新名字。
new_owner
数据库的新所有者。
new_tablespace
数据库的新缺省表空间。
configuration_parameter
value
将configuration_parameter指定的数据库会话缺省参数设置为给定值value。如果 value 是 DEFAULT 或者是等效的 RESET,那么数据库特定的设置将被删除,因此在新的会话中将使用系统范围的缺省设置。 用 RESET ALL 清除所有数据库特定设置。SET FROM CURRENT将会话的当前缺省值设置为数据库特定值。
参阅 SET 和 第 18 章获取有关合法的变量名与取值的更多信息。
注意

我们也可以把一个会话缺省设置绑定到一个特定角色,而不是某个数据库上; 参阅 [ALTER ROLE]。如果存在冲突,那么角色特定设置的优先级高于数据库特定的设置,将之覆盖。

示例

禁用数据库 test 上缺省启用的索引扫描功能∶

   ALTER DATABASE test SET enable_indexscan TO off;
兼容性

ALTER DATABASE语句是PostgreSQL的扩展。

参见

CREATE DATABASE, DROP DATABASE, SET, CREATE TABLESPACE