Skip to content

PostgreSQL - 删除数据库

本章介绍如何在 PostgreSQL 中删除数据库。你有两种主要方法来完成此任务:

  • 使用 DROP DATABASE SQL 命令。
  • 使用 dropdb 命令行工具。

警告:DROP DATABASE 命令是不可逆的。它会永久删除数据库,包括所有表、数据和相关对象。在执行此操作之前,务必备份你的数据。

方法 1:使用 DROP DATABASE SQL 命令

Section titled “方法 1:使用 DROP DATABASE SQL 命令”

DROP DATABASE 命令会完全移除一个数据库。它会删除服务器上的物理数据文件,并移除数据库的目录条目。

  • 权限:你必须是数据库所有者或超级用户才能执行此命令。
  • 无活动连接:当任何人(包括你自己)连接到数据库时,你不能删除它。你必须连接到另一个数据库(例如,默认的 postgres 数据库)才能发出此命令。
DROP DATABASE [IF EXISTS] database_name [WITH (FORCE)];
参数描述
database_name要删除的数据库名称。
IF EXISTS(可选,但建议在脚本中使用)如果数据库不存在,则防止抛出错误。届时会发出一个通知。
WITH (FORCE)(可选,PostgreSQL 13+ 版本可用)在删除目标数据库之前,强制终止所有到该数据库的活动连接。这可能很有用,但应谨慎使用。

要删除名为 testdb 的数据库,你首先需要连接到另一个数据库,然后运行以下命令:

-- 步骤 1:使用 psql 连接到 'postgres' 数据库
-- psql -U 你的用户 -d postgres
-- 步骤 2:执行 DROP DATABASE 命令
DROP DATABASE testdb;
-- 为避免脚本中的错误,请使用 IF EXISTS:
DROP DATABASE IF EXISTS testdb;

dropdb 是 DROP DATABASE 命令的命令行封装。它通常更方便,因为它为你处理连接细节,连接到默认的维护数据库来执行删除操作。

dropdb [connection-options] [options] dbname
选项描述
dbname要删除的数据库名称。
-h host指定服务器的主机名。
-p port指定服务器的端口。
-U username指定连接时使用的用户名。
-W强制要求输入密码。
-e回显 dropdb 生成并发送到服务器的命令。
--if-exists如果数据库不存在,则不报告错误。

要从操作系统的命令行删除 testdb 数据库:

# 此命令以 'postgres' 用户身份连接到本地服务器
# 并在删除 'testdb' 之前提示输入密码。
dropdb -h localhost -p 5432 -U postgres -W testdb

如果你的环境变量(如 PGHOST、PGPORT 和 PGUSER)已设置,你可以简化命令:

dropdb testdb