3 回答
TA贡献1854条经验 获得超8个赞
因为,您正试图dropDb
在数据库上执行命令,您已打开连接到该数据库。
根据 postgres 文档:
您无法连接到要删除的数据库。相反,连接到 template1 或任何其他数据库并再次运行此命令。
这是有道理的,因为当你删除整个数据库时,所有引用该数据库的打开连接都变得无效,所以推荐的方法是连接到不同的数据库,然后再次执行此命令。
如果您面临这样一种情况,即不同的客户端连接到数据库,并且您确实想删除该数据库,则可以强制断开所有客户端与该特定数据库的连接。
例如,强制断开所有客户端与数据库的连接mydb
:
如果 PostgreSQL < 9.2
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
别的
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
注意:此命令需要超级用户权限。
然后,您可以连接到不同的数据库,并dropDb
再次运行命令。
TA贡献2080条经验 获得超4个赞
我在 Windows 10 中使用 PostgreSQL 12 和 pgAdmin-4。我不得不使用上述答案的组合来删除一个数据库,我无法在 pgAdmin 中删除它,因为我无法关闭 pgAdmin 中的所有打开的连接。
关闭 pgAdmin-4。
在 Windows 命令行中,假设我的服务器名称是 postgres,我的数据库是 mydb:
C:\> psql -U postgres
我用我的服务器密码登录。
然后我关闭了与 mydb 的所有打开的连接:
postgres-# SELECT * FROM pg_stat_activity WHERE pg_stat_activity.datname='mydb'; postgres-# SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
最后,我成功删除了 mydb:
postgres-# DROP DATABASE mydb;
现在,如果我回到 pgAdmin-4,它就消失了。
- 3 回答
- 0 关注
- 1225 浏览
添加回答
举报