PostgreSQL-由于一些自动连接到数据库,无法删除数据库

307

每当我尝试删除数据库时,都会出现以下错误:

ERROR:  database "pilot" is being accessed by other users
DETAIL:  There is 1 other session using the database.

当我使用:

SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';

我从那个数据库中断了连接,但是如果我在此之后尝试删除数据库,某种方式有人会自动连接到该数据库并出现错误。可能是什么原因导致这样?除我之外没有人使用这个数据库。

25个回答

0

虽然我在其他场合发现了两个得票最高的答案很有用,但今天解决问题的最简单方法是意识到PyCharm可能会保持一个会话开放状态,如果我在PyCharm中点击Stop,那可能会有所帮助。在浏览器中打开pgAdmin4后,我这样做了,几乎立即看到数据库会话统计数据降至0,此时我就能够删除数据库。


"PyCharm可能正在保持一个会话打开状态"?如何解决?我在PyCharm的终端中运行单元测试(使用peewee的前端Python和后端Postgres),即“停止”按钮被禁用,但我仍然遇到这些错误... - András Aszódi
@LaryxDecidua 我认为,在我的情况下,我必须有一个在PyCharm中运行的服务实例使用了数据库。如果你退出PyCharm,实例数量是否会降至0,从而允许你删除数据库?如果是这样,那么肯定还有一些东西(比如数据库浏览器、SQL查询或其他什么)仍然处于连接状态。 - hlongmore

0

Postgresql12

常见的答案对我没有帮助。

对我来说一个不明显的解决方案是:在DROP TABLE之前禁用supervisor,如果使用kafka/rabbit。

sudo service supervisor stop

-1
在终端中尝试运行以下命令:
ps -ef | grep postgres

你会看到类似于:

501 1445 3645 0 12:05AM 0:00.03 postgres:sasha dbname [local] 空闲

第三个数字(3645)是进程 ID。

你可以删除它。

sudo kill -9 3645

然后开始您的PostgreSQL连接。

手动启动:

pg_ctl -D /usr/local/var/postgres start

我不是那个进行负面评价的人,但猜测这可能是因为这是一个重复问题,并且使用了一种危险的解决方案。 - Carolus

-1
你需要确定的是,使用DB的服务没有在运行。 我曾遇到相同问题,在运行一些Java应用程序时,上述方法都不起作用,即使是重启也不行。 运行 ps aux 来杀死使用DB的主要服务。
  • 杀掉应用程序的 kill -9 'PID'
  • 或者如果应用程序作为服务运行,请确保在您的操作系统中运行 service stop 命令。
之后默认的删除表方式将无缺陷地工作。 在我的示例中存在问题。

-1

停止你正在运行的应用程序。(在Eclipse中) 然后再尝试一次。


请在答案中添加更多细节,以帮助解决问题并说明失败原因。 - Shivam Sharma

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