ruby 提出另一个命令已经在进行中

问题描述 投票:0回答:2

我想在我的文件中输入大量数据。 为此,我正在考虑使用 postgresql 的异步处理来进行查询。 代码如下。

raw_conn = ActiveRecord::Base.connection.raw_connection

raw_conn.send_query("SELECT id FROM users")
raw_conn.set_single_row_mode
begin
  raw_conn.get_result.stream_each do |f|
    # writing process to file
  end
end

raw_conn.send_query("SELECT id FROM logins")
raw_conn.set_single_row_mode
begin
  raw_conn.get_result.stream_each do |f|
    # writing process to file
  end
end

执行第二次send_query时,出现以下错误。

 another command is already in progress

我感觉连接池是原因,但文档没有提到。 有没有办法多次运行 send_query 并获取结果?

ruby postgresql activerecord psql pg
2个回答
1
投票

我决定了。 我尝试在发送新查询之前重置连接,并且成功了。

begin
  raw_conn.get_result.stream_each do |f|
    # writing process to file
  end
ensure
 raw_conn.reset
end

0
投票

重置对我来说不太有效(第1.5.6页),但我找到了方法

discard_results
,它似乎可以为我解决这个问题。我不太确定为什么该命令仍在进行中,以及是否有官方方法来处理此问题?

无论如何,我现在的解决方案看起来像这样:

begin
  raw_connection = ActiveRecord::Base.connection.raw_connection
  raw_connection.send_query(sql)
  raw_connection.set_single_row_mode
  db_result = raw_connection.get_result
  db_result.stream_each do |row|
     # handle row
  end
ensure
  # added because of exception: "another command is already in progress"
  raw_connection.discard_results
end
© www.soinside.com 2019 - 2024. All rights reserved.