ALTER DATABASE — 更改一个数据库
ALTER DATABASEname[ [ WITH ]option[ ... ] ] whereoptioncan be: ALLOW_CONNECTIONSallowconnCONNECTION LIMITconnlimitIS_TEMPLATEistemplateALTER DATABASEnameRENAME TOnew_nameALTER DATABASEnameOWNER TO {new_owner| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER DATABASEnameSET TABLESPACEnew_tablespaceALTER DATABASEnameREFRESH COLLATION VERSION ALTER DATABASEnameSETconfiguration_parameter{ TO | = } {value| DEFAULT } ALTER DATABASEnameSETconfiguration_parameterFROM CURRENT ALTER DATABASEnameRESETconfiguration_parameterALTER DATABASEnameRESET ALL
ALTER DATABASE 更改一个数据库的属性。
第一种形式更改某些针对每个数据库的设置。(详见下文。)只有数据库的拥有者或超级用户才能更改这些设置。
第二种形式更改数据库的名称。只有数据库的拥有者或超级用户才能重命名一个数据库;非超级用户的拥有者还必须拥有 CREATEDB 特权。当前数据库不能被重命名。(如果需要这样做,请连接到另一个数据库。)
第三种形式更改数据库的拥有者。要更改拥有者,你必须能够 SET ROLE 到新的拥有角色,并且你必须拥有 CREATEDB 特权。(注意超级用户自动拥有所有这些特权。)
第四种形式更改数据库的默认表空间。只有数据库的拥有者或超级用户才能执行此操作;你还必须对新表空间拥有创建特权。此命令会把数据库旧默认表空间中的所有表或索引物理地移动到新表空间。对于此数据库来说,新的默认表空间必须是空的,并且不能有任何人连接到该数据库。位于非默认表空间中的表和索引不受影响。把文件复制到新表空间所用的方法受 file_copy_method 设置的影响。
其余的形式更改 PostgreSQL 数据库中一个运行时配置变量的会话默认值。此后每当在该数据库中启动一个新会话时,指定的值就会成为会话默认值。数据库相关的默认值会覆盖 postgresql.conf 中存在的任何设置,或者从 postgres 命令行接收到的任何设置。只有数据库的拥有者或超级用户才能更改一个数据库的会话默认值。某些变量不能用这种方式设置,或者只能由超级用户设置。
name其属性将被更改的数据库的名称。
allowconn如果为 false,则任何人都不能连接到这个数据库。
connlimit允许对这个数据库建立多少个并发连接。-1 表示无限制。
istemplate 如果为 true,则任何拥有 CREATEDB 特权的用户都可以克隆这个数据库;如果为 false,则只有超级用户或数据库的拥有者才能克隆它。
new_name数据库的新名称。
new_owner数据库的新拥有者。
new_tablespace数据库的新默认表空间。
这种形式的命令不能在事务块内执行。
REFRESH COLLATION VERSION更新数据库的排序规则版本。相关的背景信息请参见 Notes。
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 的一个扩展。