PostgreSQL DROP DATABASE 删除数据库
PostgreSQL 允许您使用 DROP DATABASE
语句删除已经存在的数据库。
当我们不需要某个数据库的时候,我们可以将数据库删除。在 PostgreSQL 中,DROP DATABASE
语句用来删除一个数据库。
注意:DROP DATABASE
语句将永久删除数据库和数据库中的所有表,请谨慎操作。
DROP DATABASE 语法
要执行 DROP DATABASE
语句,您需要是超级用户或者是数据库的所有者。
下面是 PostgreSQL DROP DATABASE
语句的语法:
DROP DATABASE [IF EXISTS] database_name;
在上面的语法中:
database_name
是要删除的数据库的名称。您需要提供一个已经存在的数据库的名称。- 如果您提供了一个不存在的数据库名称,PostgreSQL 将给出一个错误报告。您可以使用
IF EXISTS
选项防止输出此错误。 PostgreSQL 对于不存在的数据库将给出一个通知。
您不能删除仍有活动连接的数据库。此时, PostgreSQL 将给出一个错误报告。您可以使用 pg_terminate_backend()
函数结束活动连接,再删除此数据库。
PostgreSQL DROP DATABASE 实例
在本实例中,我们将使用 psql 工具连接 PostgreSQL 服务器, 创建一个数据库 test_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
数据库DROP DATABASE test_db;
ERROR: cannot drop the currently open database
也就是说,您不能删除当前打开的数据库。
-
保持刚刚的会话,打开一个新的会话并登陆,然后尝试删除:
DROP DATABASE test_db;
ERROR: database "test_db" is being accessed by other users DETAIL: There is 1 other session using the database.
这里, PostgreSQL 报告了一个错误: 数据库
test_db
正在被其他用户访问。 -
关闭以前的会话,并回到这个会话,重新尝试删除:
DROP DATABASE test_db;
DROP DATABASE
此时,数据库已经被删除。
查看数据库的活动连接并关闭
有时候,并不是我们自己连接了要删除的数据库。我们可以从 pg_stat_activity
视图中查询数据库中的活动连接,如下:
SELECT
pid,
usename,
application_name
FROM
pg_stat_activity
WHERE
datname = 'test_db';
pid | usename | application_name
-------+----------+------------------
37771 | postgres | psql
(1 row)
然后,使用 pg_terminate_backend()
函数结束刚刚返回的活动连接:
SELECT pg_terminate_backend(37771);
pg_terminate_backend
----------------------
t
(1 row)
然后,使用 DROP DATABASE
删除数据库就可以了。
结论
PostgreSQL DROP DATABASE
语句用来删除已经存在的数据库。删除数据库是一个很危险的操作,请务必小心。