PostgreSQL删除数据库前先断开连接
相关概念:PostgreSQL
PostgreSQL 删除数据库时,如果还有会话连着这个库,DROP DATABASE 会直接失败。
一个比较稳的顺序是:
- 禁止新连接
- 终止现有连接
- 再执行删除
示例
ALTER DATABASE ark_voice_skp WITH ALLOW_CONNECTIONS = false;
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'ark_voice_skp';
DROP DATABASE ark_voice_skp;为什么要先禁新连接
如果只执行 pg_terminate_backend(),新的客户端可能马上又连进来,导致删除动作仍然失败。
所以:
先封入口,再清存量连接。
注意
不要在自己当前正连接的目标数据库里执行这组命令。通常应该连到别的库,例如 postgres,再删除目标库。