我想在我的文件中输入大量数据。 为此,我正在考虑使用 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 并获取结果?
我决定了。 我尝试在发送新查询之前重置连接,并且成功了。
begin
raw_conn.get_result.stream_each do |f|
# writing process to file
end
ensure
raw_conn.reset
end
重置对我来说不太有效(第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