我有一个 cron 作业,它运行一个脚本,该脚本连接到我不管理的远程 postgres 数据库。我们被分配了一个连接,如果我或同事登录运行一些手动查询并忘记注销,我的脚本将失败
FATAL: too many connections for role
在尝试运行我的脚本之前,我需要在 crontab 或脚本本身中运行一些命令来关闭我的用户的任何连接。
就像是
select pg_cancel_backend(pid)
from pg_stat_activity
where pid <> pg_backend_pid();
没有帮助,因为这样做,我的脚本必须能够建立连接。
任何不需要已经登录或成为数据库管理员的选项都应该起作用,因为脚本应该优先于任何事情,并且该角色的唯一用户是应该遵守按时运行的脚本的用户。
谢谢。
PostgreSQL 不提供类似的东西。您需要保留第二个连接插槽备用,或者通过服务器主机提供的侧通道请求终止;说一个以超级用户身份运行的网页
pg_terminate_backend
以终止您的连接。或者,如果您对客户端主机具有本地访问权限,则可以找到并终止连接的客户端。
最后一个虽然有点麻烦的选项是运行一个
pgbouncer
实例。始终连接到 pgbouncer,并让 pgbouncer 实例连接到主数据库。如果遇到问题,您可以重新启动 pgbouncer。