九月 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
语句删除数据库。此外,您还学习了如何删除具有活跃连接的数据库。