九月 25, 2023
摘要:在本教程中,您将学习如何使用 PostgreSQL 的DROP DATABASE语句删除数据库。
目录
PostgreSQL DROP DATABASE 语句简介
一旦不再需要一个数据库,您可以使用DROP DATABASE语句删除它。
下面说明了DROP DATABASE语句的语法:
DROP DATABASE [IF EXISTS] database_name;
要删除一个数据库:
- 在
DROP DATABASE子句后指定要删除的数据库的名称。 - 使用
IF EXISTS防止删除不存在的数据库时发生错误。PostgreSQL 将发出通知。
DROP DATABASE语句将永久删除系统表数据和数据目录。此操作无法撤消,因此您必须谨慎使用。
只有超级用户和数据库所有者才能执行DROP DATABASE语句。此外,如果数据库仍有活跃连接,则无法执行DROP DATABASE语句。在这种情况下,您需要断开与数据库的连接并连接到另一个数据库,例如postgres,以执行该DROP DATABASE语句。
PostgreSQL 还提供了一个名为dropdb的实用程序,允许您删除数据库。dropdb程序在幕后执行DROP DATABASE语句。
1) 删除具有活跃连接的数据库
要删除具有活跃连接的数据库,可以按照以下步骤操作:
首先,通过查询pg_stat_activity视图找到与数据库关联的活动:
SELECT *
FROM pg_stat_activity
WHERE datname = '<database_name>';
其次,通过发出以下查询来终止活跃连接:
SELECT pg_terminate_backend (pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = '<database_name>';
请注意,如果您使用 PostgreSQL 9.1 或更早版本,请使用
procpid列而不是pid列,因为 PostgreSQL 从 9.2 版本开始将procid列更改为pid列。
第三步,执行DROP DATABASE语句:
DROP DATABASE <database_name>;
PostgreSQL DROP DATABASE 示例
我们将使用 PostgreSQL 创建数据库教程中创建的数据库进行演示。
如果您还没有创建此数据库,可以使用以下CREATE DATABASE语句来创建它们:
CREATE DATABASE hrdb;
CREATE DATABASE testdb1;
1) 删除没有活跃连接的数据库的示例
要删除hrdb数据库,请使用hrdb 所有者连接到除hrdb数据库之外的数据库,例如postgres ,然后发出以下语句:
DROP DATABASE hrdb;
PostgreSQL 删除了hrdb数据库。
2) 删除具有活跃连接的数据库的示例
以下语句删除testdb1数据库:
DROP DATABASE testdb1;
然而,PostgreSQL 发出了如下错误:
ERROR: database "testdb1" is being accessed by other users
SQL state: 55006
Detail: There is 1 other session using the database.
要删除testdb1数据库,您需要终止活跃连接并删除数据库。
首先,查询pg_stat_activity视图以查找testdb1数据库正在发生哪些活动:
SELECT *
FROM pg_stat_activity
WHERE datname = 'testdb1';

testdb1数据库有一个来自localhost的连接,因此可以安全地终止此连接并删除数据库。
其次,使用以下语句终止与testdb1数据库的连接:
SELECT
pg_terminate_backend (pg_stat_activity.pid)
FROM
pg_stat_activity
WHERE
pg_stat_activity.datname = 'testdb1';
第三步,发出删除testdb1数据库的DROP DATABASE命令:
DROP DATABASE testdb1;
PostgreSQL 永久删除testdb1。
在本教程中,您学习了如何使用 PostgreSQL 的DROP DATABASE语句删除数据库。此外,您还学习了如何删除具有活跃连接的数据库。