↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 命令 / 数据库、模式与表空间

SQL COMMAND · 数据库、模式与表空间

ALTER DATABASE

更改一个数据库

change a database

ALTER数据库、模式与表空间引入 7.3现存至 20 devel9 次语法变更

动词
ALTER
对象
DATABASE
引入版本
7.3
状态
现存
语法变更次数
9
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 语法未变,正文有更新。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

ALTER DATABASE name WITH option
option
ALLOW_CONNECTIONS allowconn CONNECTION LIMIT connlimit IS_TEMPLATE istemplate
ALTER DATABASE · 语法 2
ALTER DATABASE name RENAME TO new_name
ALTER DATABASE · 语法 3
ALTER DATABASE name OWNER TO new_owner CURRENT_ROLE CURRENT_USER SESSION_USER
ALTER DATABASE · 语法 4
ALTER DATABASE name SET TABLESPACE new_tablespace
ALTER DATABASE · 语法 5
ALTER DATABASE name REFRESH COLLATION VERSION
ALTER DATABASE · 语法 6
ALTER DATABASE name SET configuration_parameter TO = value DEFAULT
ALTER DATABASE · 语法 7
ALTER DATABASE name SET configuration_parameter FROM CURRENT
ALTER DATABASE · 语法 8
ALTER DATABASE name RESET configuration_parameter
ALTER DATABASE · 语法 9
ALTER DATABASE name RESET ALL

语法概要

ALTER DATABASE name [ [ WITH ] option [ ... ] ]

其中option可以是:

ALLOW_CONNECTIONS allowconn
CONNECTION LIMIT connlimit
IS_TEMPLATE istemplate

ALTER DATABASE name RENAME TO new_name

ALTER DATABASE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

ALTER DATABASE name SET TABLESPACE new_tablespace

ALTER DATABASE name REFRESH COLLATION VERSION

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

PostgreSQL 18 手册 · 查看完整参考页

描述

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

更新数据库排序规则版本。背景信息见注解。

configuration_parameter
value

将此数据库在指定配置参数上的会话默认值设为给定值。如果 value 是 DEFAULT,或者等效地使用了 RESET,则数据库特定设置会被移除,因此新会话将继承系统范围的默认设置。使用 RESET ALL 可清除所有数据库特定设置。SET FROM CURRENT 会把该参数在当前会话中的值保存为数据库特定值。

关于允许的参数名和值的更多信息,见 SET 和第 19 章。

注解

也可以把会话默认值绑定到特定角色,而不是数据库;见 ALTER ROLE。如果发生冲突,角色特定设置会覆盖数据库特定设置。

示例

要在数据库 test 中默认禁用索引扫描:

ALTER DATABASE test SET enable_indexscan TO off;

兼容性

ALTER DATABASE 语句是一个 PostgreSQL 扩展。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 18← 17正文更新

    正文更新
  2. PostgreSQL 17← 16正文更新

    正文更新
  3. PostgreSQL 16← 15正文更新

    正文更新
  4. PostgreSQL 15← 14语法变化

    + ALTER DATABASE name REFRESH COLLATION VERSION+ ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }正文更新
  5. PostgreSQL 14← 13语法变化

    + ALTER DATABASE name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }正文更新
  6. PostgreSQL 10← 9.6正文更新

    正文更新
  7. PostgreSQL 9.6← 9.5正文更新

    正文更新
  8. PostgreSQL 9.5← 9.4语法变化

    + ALLOW_CONNECTIONS allowconn+ IS_TEMPLATE istemplate+ ALTER DATABASE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }正文更新
  9. PostgreSQL 9.0← 8.4语法变化

    + ALTER DATABASE name RENAME TO new_name− where option can be:− ALTER DATABASE name RENAME TO newname正文更新
  10. PostgreSQL 8.4← 8.3语法变化

    + ALTER DATABASE name SET TABLESPACE new_tablespace+ ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT }正文更新
  11. PostgreSQL 8.3← 8.2语法变化

    + ALTER DATABASE name RENAME TO newname+ ALTER DATABASE name OWNER TO new_owner+ 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 name SET parameter { TO | = } { value | DEFAULT }− ALTER DATABASE name RESET parameter− ALTER DATABASE name RENAME TO newname− ALTER DATABASE name OWNER TO new_owner正文更新
  12. PostgreSQL 8.2← 8.1正文更新

    正文更新
  13. PostgreSQL 8.1← 8.0语法变化

    + ALTER DATABASE name [ [ WITH ] option [ ... ] ]+ where option can be:+ CONNECTION LIMIT connlimit正文更新
  14. PostgreSQL 8.0← 7.4语法变化

    + ALTER DATABASE name OWNER TO new_owner正文更新
  15. PostgreSQL 7.4← 7.3语法变化

    + ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT }+ ALTER DATABASE name RESET parameter+ ALTER DATABASE name RENAME TO newname− ALTER DATABASE name SET variable { TO | = } { value | DEFAULT }− ALTER DATABASE name RESET variable正文更新
  16. PostgreSQL 7.3← 7.2新增此命令

同组命令

命令动词对象版本变动最近变更
DATABASES & SCHEMAS数据库、模式与表空间9 条↑
CREATE DATABASECREATEDATABASE 1713 次
创建一个新数据库现存
ALTER DATABASEALTERDATABASE 159 次
更改一个数据库现存
DROP DATABASEDROPDATABASE 132 次
移除一个数据库现存
CREATE SCHEMACREATESCHEMA 144 次
定义一个新模式现存
ALTER SCHEMAALTERSCHEMA 144 次
更改一个模式的定义现存
DROP SCHEMADROPSCHEMA 8.21 次
移除一个模式现存
CREATE TABLESPACECREATETABLESPACE 144 次
定义一个新表空间现存
ALTER TABLESPACEALTERTABLESPACE 143 次
更改一个表空间的定义现存
DROP TABLESPACEDROPTABLESPACE 9.23 次
移除一个表空间现存