我偶尔会在Rails with PostgreSQL应用程序(通过Passenger / Nginx提供)上获得PG::TRDeadlockDetected
,并将其追溯到使用ActiveRecord::Base.connection.exececute
的代码中。
为了解决此问题,我根据文档建议将.execute
替换为.exec_query
或.exec_update
。但是,并不确定ActiveRecord::Base.connection.exec_query
是否从连接池获取连接。
ActiveRecord::Base.connection.exec_query
时,是否必须用ActiveRecord::Base.connection_pool.with_connection
包装? (我的猜测:是的) ActiveRecord::Base.connection.exec_query
时(例如,作为cronjob执行的Rake任务),是否必须用ActiveRecord::Base.connection_pool.with_connection
包装? (我的猜测:是的) 如果需要包装,与以下产品相比,有没有更短的选择?
ActiveRecord::Base.connection_pool.with_connection do |connection|
connection.exec_update "REINDEX INDEX my_complex_index"
end
(我的猜测:不)
感谢您的提示!