Ruby和PostgreSQL单行模式

lstz6jyr  于 12个月前  发布在  Ruby
关注(0)|答案(2)|浏览(105)

我正在使用Ruby从PostgreSQL DB中获取行。这是在pg gem站点(https://deveiate.org/code/pg/PG/Result.html)上描述的单行模式下完成的。

conn.send_query( "first SQL query" )
conn.set_single_row_mode
conn.get_result.stream_each do |row|
    # do something with the received row of the first query
end

我按预期分别获取结果集的所有行。然而,对于大型结果集,Ruby似乎将它们保存在内存中。这使得Ruby程序在内存耗尽时终止。
是否有方法释放已处理行的空间?我想我应该使用clear()autoclear?,但我不知道如何使用它,以及究竟要清除什么。

zf9nrax1

zf9nrax11#

尝试使用find_each approve(添加LIMITOFFSET

limit  = 1000
offset = 0

while do
  conn.send_query("SELECT * FROM users LIMIT #{limit} OFFSET #{offset}")
  conn.set_single_row_mode
  records = conn.get_result

  if records.any?
    limit  += 1000
    offset += limit
    sleep(5)
  else
    break
  end
  records.stream_each do |row|
    # do something with the received row of the first query
  end
end
gwbalxhn

gwbalxhn2#

除非autoclear?选项返回true,否则必须调用clear(),否则会导致内存泄漏。如果你有一个足够大的结果集,你可能也想手动清除。
请检查此链接
https://deveiate.org/code/pg/PG/Result.html
祝你好运!

相关问题