我需要从Postgresql数据库集群中删除数据库.即使有活动连接,我怎么能这样做?我需要一种-force标志,它会丢弃所有连接,然后是数据库.
我该如何实现它?
我目前正在使用dropdb,但其他工具也是可行的.
从版本9.5开始,当客户端连接到Postgres数据库时,只能使用
dropdb
实用程序 – 这是一个围绕
DROP DATABASE
服务器查询的简单包装器.
相当强大的解决方法如下:
使用psql或其他客户端以超级用户身份连接到服务器.不要使用要删除的数据库.
psql -h localhost postgres postgres
现在使用纯数据库客户端,您可以使用三个简单步骤强制删除数据库
>确保没有人可以连接到此数据库.您可以使用以下方法之一(第二种方法似乎更安全,但不会阻止来自超级用户的连接).
/* Method 1: update system catalog */ UPDATE pg_database SET datallowconn = 'false' WHERE datname = 'mydb'; /* Method 2: use ALTER DATABASE. Superusers still can connect! */ ALTER DATABASE mydb CONNECTION LIMIT 0;
>使用pg_terminate_backend
强制断开连接到此数据库的所有客户端.
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'mydb';
对于旧版本的Postgresql(最高9.1),将pid更改为procpid:
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'mydb';
DROP DATABASE mydb;