[英]How do you open and close a new database connection with ActiveRecord Rails 5
我有一些工作量需要增加WORK_MEM
和TEMP_BUFFERS
。 問題是,一旦執行此操作,連接(會話)就不會關閉並返回到池中。 這意味着額外的內存使用不是臨時的,因為我不能在不破壞會話的情況下將TEMP_BUFFERS
改回TEMP_BUFFERS
。
我想象工作流程是這樣的:
conn = ActiveRecord.create_new_connection
conn.execute <<-SQL
SET TEMP_BUFFERS TO '512MB';
-- do some memory intensive
CREATE TEMPORARY TABLE .....;
UPDATE ....;
SQL
conn.close
或者也許有一種方法可以關閉當前連接,並讓池創建一個新的池...
好像new_connection
是私有方法 ,這是我們需要手動創建的連接的一部分,而該連接不是池的一部分,
然后,在檢查源代碼后,您可以執行以下操作:
connection_specification = ActiveRecord::Base.connection_pool.spec
# i.e.
# connection_specification.adapter_method == 'postgresql_connection'
# connection_specification.config == {:adapter=>"postgresql", :encoding=>"unicode", :pool=>5, :database=>"someapp_development"}
connection = ActiveRecord::Base.send(
connection_specification.adapter_method,
connection_specification.config
)
# DEBUG:
puts connection.active?
# => true
connection.execute <<-SQL
SET TEMP_BUFFERS TO '512MB';
-- do some memory intensive
CREATE TEMPORARY TABLE .....;
UPDATE ....;
SQL
connection.disconnect!
# DEBUG:
puts connection.active?
# => false
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.