# 更改数据库

ALTER DATABASE — 更改数据库

# 概要

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

where option can be:

    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 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 数据库的运行时配置变量的会话默认值。每当随后在该数据库中启动新会话时,指定的值将成为会话默认值。特定于数据库的默认值会覆盖中存在的任何设置postgresql.conf或已收到postgres命令行。只有数据库所有者或超级用户可以更改数据库的会话默认值。某些变量不能这样设置,或者只能由超级用户设置。

# 参数

姓名

要更改其属性的数据库的名称。

允许连接

如果为 false,则没有人可以连接到该数据库。

限制

可以对该数据库进行多少并发连接。-1 表示没有限制。

是模板

如果为真,那么任何用户都可以克隆这个数据库创建数据库特权;如果为 false,则只有超级用户或数据库所有者可以克隆它。

新名字

数据库的新名称。

新主人

数据库的新所有者。

新表空间

数据库的新默认表空间。

这种形式的命令不能在事务块内执行。

配置参数
价值

将此数据库的指定配置参数的会话默认设置为给定值。如果*价值*是默认或者,等效地,重置使用时,将删除特定于数据库的设置,因此系统范围的默认设置将在新会话中继承。采用重置全部清除所有特定于数据库的设置。从当前设置将会话的当前参数值保存为特定于数据库的值。

第 20 章有关允许的参数名称和值的更多信息。

# 笔记

也可以将会话默认值绑定到特定角色而不是数据库;看改变角色.如果存在冲突,特定于角色的设置会覆盖特定于数据库的设置。

# 例子

在数据库中默认禁用索引扫描测试

ALTER DATABASE test SET enable_indexscan TO off;

# 兼容性

更改数据库语句是 PostgreSQL 扩展。

# 也可以看看

创建数据库,删除数据库,,创建表空间