svo*_*oop 6 ruby postgresql activerecord ruby-on-rails
我偶尔会使用PG::TRDeadlockDetectedRails with PostgreSQL 应用程序(通过 Passenger/Nginx 提供服务)并跟踪它到代码中使用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
Run Code Online (Sandbox Code Playgroud)
(我的猜测:没有)
感谢您的提示!