使用 PostgreSQL ALTER DATABASE 语句重命名数据库
本文介绍了在 PostgreSQL 中重命名一个数据库的详细步骤。
PostgreSQL 允许您使用 ALTER DATABASE ... RENAME
语句来重命名一个数据库。
重命名数据库的注意事项
重命名数据库是一个简单的动作,但是它可能会带来一些其他的问题。如果您没有同步修改那些用到此数据库的代码,则他们可能不能正常运行。
当您打算修改一个数据库名的时候,您需要首先从整体上进行评估。然后,再决定是否进行重命名数据库。一旦您决定了要重命名一个数据库,您需要把需要同步修改的地方整理清楚。
PostgreSQL 重命名数据库语法
要重命名一个数据库,请按照下面的语法使用 ALTER DATABASE ... RENAME
语句:
ALTER DATABASE name RENAME TO new_name;
解释说明:
name
是要重命名的数据库的名字。new_name
是数据库的新名字。
您不能重命名仍有活动连接的数据库,否则 PostgreSQL 将给出一个错误。
-
如果您要重命名当前正在连接的数据库, PostgreSQL 将给出以下错误:
ERROR: current database cannot be renamed。
-
如果您要重命名的数据库仍有活动连接,PostgreSQL 将给出以下错误:
ERROR: database "testdb" is being accessed by other users DETAIL: There is 1 other session using the database.
实例
在本实例中,我们将使用 psql 工具连接 PostgreSQL 服务器, 创建一个数据库 test_db
并将它重命名为 test_new_db
。
-
首先,请使用具有权限的用户登录 PostgreSQL 服务器:
[~] psql -U postgres psql (14.4) Type "help" for help.
-
其次,使用默认的选项创建
test_db
数据库:CREATE DATABASE test_db;
CREATE DATABASE
如果您输入了一个已经存在的数据库名称, PostgreSQL 将返回一个错误:
ERROR: database "test_db" already exists
-
然后,使用
\c
命令切换到刚刚创建的test_db
数据库:\c test_db;
You are now connected to database "test_db" as user "postgres".
-
然后,尝试将
test_db
数据库重命名为test_new_db
:ALTER DATABASE test_db RENAME TO test_new_db;
ERROR: current database cannot be renamed
也就是说,您不能重命名当前打开的数据库。
-
保持刚刚的会话,打开一个新的会话并登陆,然后尝试重命名
test_db
数据库:ALTER DATABASE test_db RENAME TO test_new_db;
ERROR: database "test_db" is being accessed by other users DETAIL: There is 1 other session using the database.
这里, PostgreSQL 报告了一个错误: 数据库
test_db
正在被其他用户访问。 -
关闭以前的会话,并回到这个会话,重新尝试重命名:
ALTER DATABASE test_db RENAME TO test_new_db;
DROP DATABASE
此时,
test_db
数据库已经被重命名为test_new_db
。
查看并关闭数据库的活动连接
有时候,并不是我们自己连接了要重命名的数据库。我们可以从 pg_stat_activity
视图中查询数据库中的活动连接,如下:
SELECT
pid,
usename,
application_name
FROM
pg_stat_activity
WHERE
datname = 'test_db';
pid | usename | application_name
------+----------+------------------
8777 | postgres | psql
(1 row)
然后,使用 pg_terminate_backend()
函数结束刚刚返回的活动连接:
SELECT pg_terminate_backend(8777);
pg_terminate_backend
----------------------
t
(1 row)
最后,使用 ALTER DATABASE ... RENAME
重命名数据库就可以了。
结论
PostgreSQL ALTER DATABASE ... RENAME
语句用来重命名数据库。 您不能重命名有活动连接的数据库。