PostgreSQL: 删除数据库,但数据库仍然存在

46

我是 PostgreSQL 的新手,正在尝试理解它。我熟悉数据库和 MySQL。

我正在尝试删除我创建的数据库,因为似乎 psql 忽略了我尝试通过 Django 推送的更改。

当我执行 \l 时,我得到以下响应:

                                  List of databases
       Name       | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
------------------+--------+----------+-------------+-------------+-------------------
 postgres         | neurix | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | 
 test_db          | neurix | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | 
 template0        | neurix | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | =c/neurix        +
                  |        |          |             |             | neurix=CTc/neurix
 template1        | neurix | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | =c/neurix        +
                  |        |          |             |             | neurix=CTc/neurix
 template_postgis | neurix | UTF8     | en_AU.UTF-8 | en_AU.UTF-8 | 
(5 rows)

现在我想删除名为"test_db"的数据库。

DROP DATABASE test_db

但是当我执行 \l 命令后,表还在,概述看起来也没变。


1
您可能还想尝试使用双引号:DROP DATABASE "mydb"; - Shahin Dohan
2个回答

126

你在 DROP DATABASE test_db 后面加了一个 ; 吗? PostgreSQL 是否输出了对你的命令的响应?


1
谢谢 - 缺少了分号。 - neurix
41
这就是为什么他们付我高额薪水。分号按时使用,每一次都不出错。 - Tom Anderson
2
分号 - 每种臭名昭著的语言的基石 - karx
2
在我目前的版本(11.2)中,需要注意大小写:drop database <name>; 会失败,但是 DROP DATABASE <name>; 是成功的。 - Matt Sanders
1
是的,我不是花了几分钟,而是——等一下——几个小时来尝试解决这个“错误”。 - testing_22
显示剩余2条评论

4
我在使用 Ubuntu 20.04 操作系统和 PostgreSQL 数据库时,开发 Rails 6 应用出现了类似的问题。
当我运行以下命令时:
DROP DATABASE my-db;

数据库已成功删除,但是数据库的架构仍然存在。

因此,当我运行以下命令时:

CREATE DATABASE my-db;

当我检查新创建的数据库中的表格时,我发现它们仍然包含之前已删除的数据库中相同的表格,尽管我没有运行任何迁移。

以下是我的解决方法:

不要运行以下命令:

DROP DATABASE my-db;

运行以下命令:

DROP DATABASE IF EXISTS my-db;

这将会删除数据库及其对应的模式。

就这些。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接