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 语句用来删除已经存在的数据库。删除数据库是一个很危险的操作,请务必小心。