如何使用rails控制台终止所有postgre连接?我得到了这个:
PG::ConnectionBad
FATAL: sorry, too many clients already FATAL: sorry, too many clients already
Rails.root: C:/Users/IBM_ADMIN/Desktop/Work/Extreme Blue Summer Internship/extreme-blue
Application Trace | Framework Trace | Full Trace
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `initialize'
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `new'
activerecord (4.2.7.1) lib/active_record/connection_adapters/postgresql_adapter.rb:651:in `connect'
activerecord (4.2.7.1) lib/active_record/connection_adapters/pos
问题是我不想删除数据库,只是为了杀掉它的所有连接?任何帮助将不胜感激!
tgresql_adapter.rb:242:在`initialize'
答案 0 :(得分:1)
您不能使用rails console
来杀死Postgres进程。
你应该重启Postgres,无论你是从命令行还是从PostgresApp应用程序启动它,它都会清除当前的连接。
作为旁注 - 你不应该超过Postgres在Rails应用程序中提供的连接数。你需要一个很多的并发用户,或者某个地方存在一些真正有问题的循环。
答案 1 :(得分:0)
作为PostgreSQL超级用户,您可以使用函数pg_terminate_backend
来终止会话。您可以从pg_stat_activity
视图中获取后端进程ID列表。
所以查询可能如下所示:
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE pid <> pg_backend_pid();
为减少破坏性,您可以添加AND state = 'idle'
。
确保您的应用程序未以超级用户身份连接,然后将始终存在可供超级用户使用的superuser_reserved_connections
(默认3)连接。
所有这一切,您的应用程序应该不超过最大连接数。如果您无法保证,请使用像pgBouncer这样的连接池。