如何删除当前数据库的psql命令

16

尝试删除主要数据库 "foo" 时,出现错误:

错误:无法删除当前打开的数据库

如何正确删除主要的psql数据库?


https://dba.stackexchange.com/questions/11893/force-drop-db-while-others-may-be-connected - Mitch Wheat
@MitchWheat 那个问题被标记为离题(所以我无法发布与SEO相关的答案),并且没有包含有关目标数据库是否为当前数据库的任何内容。 - 还公平地指出,dba stackex可能有很好的资源。 - ThorSummoner
链接的问题被标记为不适合讨论,这也很可能是如此。 - Mitch Wheat
2个回答

40

数据库postgres就是为此而存在的。

连接到它以删除您的数据库。


在某些版本的PostgreSQL中,您不能使用同一数据库的会话来删除数据库。请连接到另一个数据库,然后运行命令DROP DATABASE DB;。 - Entree
1
@MacGyver 对,这就是我的答案建议的。除非你需要删除 postgres 数据库,否则你必须连接到另一个数据库。但是 postgres 通常是空的,你不应该感到需要删除它。 - Laurenz Albe
抱歉给你点了踩。我在另一个上给你点了赞来弥补它。 - Entree
太棒了,我不知道有这个postgres空数据库。虽然我很难找到相关文档,但是为什么/何时/如何创建这个数据库呢?它是在安装Postgresql时生成的吗? - benj-p
1
@benj-p 当您使用initdb创建数据库集群时,它就被创建了。 - Laurenz Albe
显示剩余4条评论

7
创建一个新的数据库以便在删除原始数据库时登录 - 我猜?
create database _;
(relog with -d _ )
drop database dbname;
create database dbname;
(relog)
drop database _;

创建一个新的数据库绝对是不必要的额外步骤。直接连接到内部数据库,如 postgres - Sampson Crowley
凭记忆,我模糊地记得要删除的目标数据库是“postures”;即使在这种情况下,template0也可能存在?无论如何,如果创建了临时数据库,它将存在,而不管要操作的目标数据库是什么。干杯 - ThorSummoner
我不知道你的 "postures" 数据库是什么,但 "postgres" 数据库 始终 存在。没有必要创建一个新的临时数据库来删除数据库。切换到 "postgres" 并删除该数据库。你的方法 强制 你创建一个新的数据库或保留一个临时数据库。 - Sampson Crowley
哦,抱歉打错字了,“要删除的目标数据库是postgres”(这个总是存在的),在我的实验中,这个数据库似乎能够被删除而且在被删除后不存在了。这段评论是从旧的记忆中引用的。 - ThorSummoner

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