PostgreSQL删除数据库前先断开连接

相关概念:PostgreSQL

PostgreSQL 删除数据库时,如果还有会话连着这个库,DROP DATABASE 会直接失败。

一个比较稳的顺序是:

  1. 禁止新连接
  2. 终止现有连接
  3. 再执行删除

示例

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,再删除目标库。