PostgreSQL 教程: ALTER DATABASE 更改数据库

九月 25, 2023

摘要:在本教程中,您将学习如何使用 PostgreSQL 的ALTER DATABASE语句修改现有数据库。

PostgreSQL ALTER DATABASE 语句简介

ALTER DATABASE语句允许您对数据库进行以下操作:

  • 更改数据库的属性
  • 重命名数据库
  • 更改数据库的所有者
  • 更改数据库的默认表空间
  • 更改数据库运行时配置变量的会话默认值

1) 更改数据库的属性

要更改数据库的属性,请使用以下形式的ALTER DATABASE语句:

ALTER DATABASE name WITH option;

该选项可以是:

  • IS_TEMPLATE
  • CONNECTION LIMIT
  • ALLOW_CONNECTIONS

请注意,只有超级用户或数据库所有者才能更改这些设置。

2) 重命名数据库

以下ALTER DATABASE RENAME TO语句重命名数据库:

ALTER DATABASE database_name
RENAME TO new_name;

无法重命名当前数据库。因此,您需要连接到另一个数据库并从该数据库重命名它。

只有超级用户和具有 CREATEDB 权限的数据库所有者才能重命名数据库。

3) 更改数据库的所有者

以下ALTER DATABASE语句将数据库的所有者更改为新的所有者:

ALTER DATABASE database_name
OWNER TO new_owner | current_user | session_user;

以下用户可以更改数据库的权限:

  • 具有CREATEDB权限的数据库所有者,并且是新所有者角色的直接或间接成员。
  • 超级用户

4) 更改数据库的默认表空间

以下语句更改数据库的默认表空间

ALTER DATABASE database_name
SET TABLESPACE new_tablespace;

该语句将表和索引从旧表空间物理地移动到新表空间。

要设置新表空间,表空间需要为空并且有到数据库的连接。

超级用户和数据库所有者可以更改数据库的默认表空间。

5) 更改运行时配置变量的会话默认值

每当您连接到数据库时,PostgreSQL 都会从postgresql.conf文件中加载配置变量并默认使用这些变量。

要覆盖特定数据库的这些设置,请使用ALTER DATABASE SET语句,如下:

ALTER DATABASE database_name
SET configuration_parameter = value;

在后续会话中,PostgreSQL 将覆盖postgresql.conf文件中的设置。

只有超级用户或数据库所有者才能更改数据库运行时配置的会话默认值。

PostgreSQL ALTER DATABASE 示例

首先,使用postgres用户登录 PostgreSQL,新建一个数据库,名为testdb2,用于演示。

CREATE DATABASE testdb2;

其次,使用以下语句将testdb2重命名为testhrdb

ALTER DATABASE testdb2 
RENAME TO testhrdb;

第三步,执行以下语句,将testhrdb 数据库的所有者从postgres更改为hr,并假设该hr角色已存在。

ALTER DATABASE testhrdb 
OWNER TO hr;

如果hr角色不存在,可以使用以下CREATE ROLE语句创建:

CREATE ROLE hr
LOGIN 
CREATEDB
PASSWORD 'securePa$$1';

第四步,将testhrdb 的默认表空间从pg_default更改为hr_default,并假设该hr_default表空间已经存在。

ALTER DATABASE testhrdb
SET TABLESPACE hr_default;

如果hr_default表空间不存在,可以使用以下语句创建:

CREATE TABLESPACE hr_default
OWNER hr
LOCATION 'C:\\sampledb\\hr';

第五步,使用以下语句将escape_string_warning 配置变量设置为off

ALTER DATABASE testhrdb 
SET escape_string_warning = off;

在本教程中,您学习了如何使用 PostgreSQL 的ALTER DATABASE语句。