============== ALTER DATABASE ============== .. container:: refentry :name: SQL-ALTERDATABASE .. container:: titlepage .. container:: refnamediv .. rubric:: ALTER DATABASE :name: alter-database ALTER DATABASE — 更改一个数据库 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis 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_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 .. container:: refsect1 :name: id-1.9.3.7.5 .. rubric:: 描述 :name: 描述 ``ALTER DATABASE``\ 更改一个数据库的属性。 第一种形式更改某些针对每个数据库的设置(详见下文)。只有数据库拥有者或者超级用户可以更改这些设置。 第二种形式更改数据库的名称。只有数据库拥有者或者超级用户可以重命名一个数据库,非超级用户拥有者还必须拥有\ ``CREATEDB``\ 特权。当前数据库不能被重命名(如果你需要这样做请连接到一个不同的数据库)。 第三种形式更改数据库的拥有者。要修改拥有者,你必须拥有该数据库并且也是新拥有角色的一个直接或间接成员,并且你必须具有\ ``CREATEDB``\ 特权(注意超级用户自动拥有所有这些特权)。 第四种形式更改数据库的默认表空间。只有数据库拥有者或超级用户能够这样做,你还必须对新表空间具有创建特权。这个命令会在物理上移动位于该数据库旧的默认表空间中的任何表或索引到新的表空间中。新的默认表空间对于这个数据库必须是空的,并且不能有人可以连接到该数据库。在非默认表空间中的表和索引不受影响。 剩下的形式更改用于一个PostgreSQL数据库的运行时配置变量的会话默认值。接下来只要一个新的会话在该数据库中开始,指定的值就会成为该会话的默认值。数据库相关的默认值会覆盖出现在\ ``postgresql.conf``\ 中或者从\ ``postgres``\ 命令行接收到的设置。只有数据库拥有者或超级用户可以更改一个数据库的会话默认值。一些变量不能用这种方式设置或者只能由超级用户更改。 .. container:: refsect1 :name: id-1.9.3.7.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist *``name``* 要被修改属性的数据库名称。 *``allowconn``* 如果为假,则没有人能连接到这个数据库。 *``connlimit``* 与这个数据库可以建立多少个并发连接。-1 表示没有限制。 *``istemplate``* 如果为真,则任何具有\ ``CREATEDB``\ 特权的用户都可以从这个数据库进行克隆。如果为假,则只有超级用户或者这个数据库的拥有者可以克隆它。 *``new_name``* 数据库的新名称。 *``new_owner``* 数据库的新拥有者。 *``new_tablespace``* 数据库的新默认表空间。 这种形式的命令不能在事务块内执行。 *``configuration_parameter``* \ *``value``* 将这个数据库的指定配置参数的会话默认值设置为给定值。如果\ *``value``*\ 是\ ``DEFAULT``\ ,或者等效地使用了\ ``RESET``\ ,数据库相关的设置会被移除,因此系统范围的默认设置将会在新会话中继承。使用\ ``RESET ALL``\ 可清除所有数据库相关的设置。\ ``SET FROM CURRENT``\ 会保存该会话的当前参数值作为数据库相关的值。 .. container:: refsect1 :name: id-1.9.3.7.7 .. rubric:: 注解 :name: 注解 也可以把一个会话的默认值绑定到一个特定角色而不是一个数据库,见\ `ALTER ROLE `__\ 。如果有冲突,角色相关的设置会覆盖数据库相关的值。 .. container:: refsect1 :name: id-1.9.3.7.8 .. rubric:: 例子 :name: 例子 要在数据库\ ``test``\ 中默认禁用索引扫描: .. code:: programlisting ALTER DATABASE test SET enable_indexscan TO off; .. container:: refsect1 :name: id-1.9.3.7.9 .. rubric:: 兼容性 :name: 兼容性 ``ALTER DATABASE``\ 语句是一个PostgreSQL扩展。 .. container:: refsect1 :name: id-1.9.3.7.10 .. rubric:: 参见 :name: 参见 `CREATE DATABASE `__, `DROP DATABASE `__, `SET `__, `CREATE TABLESPACE `__