Skip to content

PostgreSQL - 重命名数据库

重命名数据库是一项管理任务,它会更改数据库的标识符。重命名后,数据库只能通过其新名称访问。此操作需要超级用户权限,并需谨慎处理以避免中断正在运行的服务。

重命名数据库的 SQL 命令非常直接:

ALTER DATABASE old_database_name RENAME TO new_database_name;
  • old_database_name:数据库的当前名称。
  • new_database_name:数据库所需的新名称。

在重命名数据库之前,您必须确保满足一个关键条件:

  • 无活动连接:当数据库存在任何活动连接(包括您自己的会话)时,无法重命名。
  • 权限:您必须拥有超级用户权限或成为数据库所有者。

以下步骤演示了使用 psql 命令行工具安全正确地重命名数据库的程序。

步骤 1:连接到不同的数据库。您不能连接到您打算重命名的数据库。默认的维护数据库 postgres 是一个安全的选择。

# 以 postgres 用户连接到 'postgres' 数据库
psql -U postgres -d postgres

步骤 2:列出现有数据库以确认当前名称。假设我们想将 test_app_db 重命名为 production_app_db。

postgres=# \l

输出将显示您的数据库列表,包括 test_app_db。

步骤 3:执行 ALTER DATABASE 命令。如果存在活动连接,此命令将失败。

postgres=# ALTER DATABASE test_app_db RENAME TO production_app_db;
ALTER DATABASE

步骤 4:验证更改。再次列出数据库以查看新名称是否生效。

postgres=# \l

列表现在将显示 production_app_db 而不是 test_app_db。数据库中的所有表、数据和权限保持不变。

在生产环境中,您可能会因为其他用户或应用程序连接而遇到错误。错误将如下所示:

ERROR: database "test_app_db" is being accessed by other users
DETAIL: There is 1 other session using the database.

最佳方法是优雅地关闭连接到数据库的应用程序服务。作为最后手段,数据库管理员可以强制终止连接。这是一个破坏性操作,应极其谨慎使用。

-- 此命令将强制断开所有连接到 'test_app_db' 的用户。
-- 警告:这可能导致进行中的事务数据丢失。
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'test_app_db';
  • 安排停机时间:重命名生产数据库应该是一项计划内的维护活动。
  • 更新连接字符串:重命名后,所有应用程序和服务必须在其连接字符串中更新为新的数据库名称。
  • 使用一致的命名:为您的数据库遵循清晰一致的命名约定(例如,project_dev、project_staging、project_prod)。