在 PostgreSQL 中通过 PSQL 删除数据库

Bilal Shahid 2023年1月30日 2022年5月14日
  1. 使用 DROP 命令通过 PSQL 删除数据库
  2. 使用 DROPDB 作为 PSQL 命令的 Shell 替代方案
  3. 结论
在 PostgreSQL 中通过 PSQL 删除数据库

有两种方法可以访问 PostgreSQL 对象和系统中的数据库。一种是通过界面,例如 PGADMIN 之类的图形界面,另一种是基本的命令行工具 psql。

今天,我们将研究发出 DROP DATABASE 命令的 Psql 版本以及它在 PGADMIN 中的工作方式。

使用 DROP 命令通过 PSQL 删除数据库

首先,从下面的文件路径中打开 Psql。

C:/Program Files/PostgreSQL/14/bin (instead of 14, you might have a different version)

从搜索栏中打开 CMD,然后运行命令:

C:\Users\[Your User]>cd C:/Program Files/PostgreSQL/14/bin

现在,键入以下内容:

C:\Program Files\PostgreSQL\14\bin>psql -U postgres

如果你不明白发生了什么。我们建议你先阅读 Psql 设置和命令。

你将被要求输入 Postgres 的 PASSWORD,完成后,按回车键。

你现在将在你的 PostgreSQL 服务器中。要查看所有数据库,请写出以下命令:

\l

此命令将列出你当前在服务器上的所有数据库。

作为旁注,请确保不要修改或删除任何你不知道的数据库,因为这可能有害并导致工作丢失。按照教程进行操作,不要冒险进入未知领域。

所以在本教程中,当前的数据库是:

输出:

数据库视图

假设我们想要 DROP postgres 数据库。我们可以实现这一点,如下所示。

DROP DATABASE postgres;

如果 user 不起作用,你可以发出的另一个命令是使用以下命令。

psql -U <user>  -c "drop DATABASE [DATABASE NAME]"

确保在末尾包含一个分号。

该命令将 DROP 你的数据库并有效地工作。但是,如果 DATABASE 当前已打开或最后被多个用户访问,它将返回错误。

ERROR:  cannot drop the currently open DATABASE

因此,请在删除数据库之前关闭你的数据库并保存你的工作。

使用 DROPDB 作为 PSQL 命令的 Shell 替代方案

许多用户会从 Psql 发出 DROPDB 命令而不是 CMD(命令提示符),这是错误的。

你必须打开 CMD 来运行这个命令来 DROP 数据库。让我们学习如何做到这一点。

在 Windows 中搜索环境变量。在下面的框中,单击环境变量

搜索环境变量

点击 NEW 添加新值的路径。

新用户变量

VARIABLE PATH 中,输入 BINPATHLIB 文件夹,这将是:

C:\Program Files\PostgreSQL\14\bin
                  C:\Program Files\PostgreSQL\14\lib

按 Enter 并关闭。

在 CMD 中,使用以下命令输入 BIN 文件夹。

cd C:\Program Files\PostgreSQL\14\bin

发出以下命令。

DROPBD [DATABASE NAME]

此命令将根据需要删除数据库。以上所有内容都是为了确保你的系统在发出 DROPDB 命令时不会出现错误。

强制断开连接并使用 DROPDB 作为 PSQL 命令的 Shell 替代方案

我们假设你的系统尚未设置环境变量。如果这样做,请保持原样或将它们编辑为以下配置。

如果你想在发出 DROP 命令时使用强制断开数据库,你可以在 shell CMD 中使用 -f 关键字,在数据库中使用 FORCE

对于 CMD 中的 DROP 命令:

DROPBD -f [DATABASE NAME]

对于数据库界面或 PGADMIN 中的 DROP 命令,请使用以下命令:

drop database postgres with (FORCE)

FORCE 终止与数据库的所有现有连接,在调用 DROP 命令之前是必不可少的。 -f 也是如此。

或者,要切断所有现有连接,你可以继续使用以下命令发出 PROCESS TERMINATION 命令:

select pg_terminate_backend([process id]) from pg_stat_activity where datname='database name';

使用它会终止在后台运行的 Postgres 服务器的当前会话。在此之后,你可以发出 DROP 命令来删除数据库。

发出 DROP 命令的另一种方法是通过配置 pg_hba.conf 文件来限制对数据库的访问。但是,这是最不推荐的。

最好通过重新启动服务器并调用 DROP 命令来切断连接。此外,请确保没有其他用户在数据库上进行操作,一旦删除数据库就会丢失。

使用 DROPDB 作为 Ubuntu 用户的 PSQL 命令的 Shell 替代方案

对于 Ubuntu 中的用户,你可以发出以下命令。

连接请求:

sudo -i -u postgres psql

使用 \l 查看可用的数据库,

postgres=#  \l

并且使用 DROP DATABASE [database_name] 命令,你可以删除数据库。

你可以在删除数据库之前使用 IF EXISTS 命令检查数据库是否已经存在,因为如果不存在,DATABASE DROP 命令将返回错误。

以下是使用 Postgres 命令的不同方式:

Postgres 命令

例如,-i 命令会在删除前要求确认。因此,你可以根据需要使用不同的语法。

另外,请记住,一旦数据库被删除,我们就无法恢复它。这就是为什么我们必须在发出命令之前使用确认标志。

结论

我们希望你今天了解了为 PostgreSQL 数据库中存在的数据库发出 DROP 命令的不同方法。这些可以以任何需要的方式使用。

但是,在某些情况下,最好检查是否存在所有先决条件,例如在 CMD shell 的情况下,环境变量必须事先存在。

Author: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

相关文章 - PostgreSQL Database