ALTER DATABASE — 更改一个数据库
ALTER DATABASEname[ [ WITH ]option[ ... ] ] 其中option可以是: ALLOW_CONNECTIONSallowconnCONNECTION LIMITconnlimitIS_TEMPLATEistemplateALTER DATABASEnameRENAME TOnew_nameALTER DATABASEnameOWNER TO {new_owner| CURRENT_USER | SESSION_USER } ALTER DATABASEnameSET TABLESPACEnew_tablespaceALTER DATABASEnameSETconfiguration_parameter{ TO | = } {value| DEFAULT } ALTER DATABASEnameSETconfiguration_parameterFROM CURRENT ALTER DATABASEnameRESETconfiguration_parameterALTER DATABASEnameRESET ALL
ALTER DATABASE更改一个数据库的属性。
第一种形式更改某些数据库级设置(详见下文)。只有数据库拥有者或者超级用户才能更改这些设置。
第二种形式更改数据库的名称。只有数据库拥有者或者超级用户可以重命名数据库;非超级用户拥有者还必须具有CREATEDB权限。当前连接的数据库不能被重命名(如果需要这样做,请连接到另一个数据库)。
第三种形式更改数据库的所有者。要更改所有者,必须拥有该数据库,并且还必须是新所有者角色的直接或间接成员,并且必须拥有CREATEDB权限。(请注意,超级用户会自动拥有所有这些权限。)
第四种形式更改数据库的默认表空间。只有数据库所有者或超级用户可以执行此操作;还必须拥有新表空间的创建权限。此命令会将数据库旧默认表空间中的所有表或索引物理移动到新表空间。对该数据库而言,新默认表空间必须为空,并且不能有任何人连接到该数据库。非默认表空间中的表和索引不受影响。
其余形式会更改某个PostgreSQL数据库的运行时配置变量的会话默认值。此后每当在该数据库中启动一个新会话时,指定的值就会成为会话默认值。数据库特定的默认值会覆盖postgresql.conf中的设置,或者从postgres命令行接收到的设置。只有数据库拥有者或者超级用户才能更改该数据库的会话默认值。某些变量不能以这种方式设置,或者只能由超级用户设置。
name要修改其属性的数据库名称。
allowconn如果为假,则没有人能连接到这个数据库。
connlimit这个数据库允许多少并发连接。-1 表示没有限制。
istemplate如果为 true,则任何拥有CREATEDB权限的用户都可以克隆该数据库;如果为 false,则只有超级用户或数据库所有者可以克隆它。
new_name数据库的新名称。
new_owner数据库的新拥有者。
new_tablespace数据库的新默认表空间。
这种形式的命令不能在事务块内执行。
configuration_parametervalue将此数据库的会话默认值设置为指定配置参数的给定值。如果指定value为DEFAULT,或者等效地使用RESET,则删除数据库特定设置,因此新会话将继承系统范围的默认设置。使用RESET ALL清除所有数据库特定设置。SET FROM CURRENT将会话当前参数值保存为数据库特定值。
有关允许的参数名称和值的更多信息,请参见SET和Chapter 19。
也可以把会话默认值绑定到特定角色,而不是数据库;见ALTER ROLE。如果发生冲突,角色特定设置会覆盖数据库特定设置。
要在数据库test中默认禁用索引扫描:
ALTER DATABASE test SET enable_indexscan TO off;
ALTER DATABASE语句是一个PostgreSQL扩展。