Rails应用程序中的分段错误,包含数百万个数据行的表

时间:2013-02-17 23:13:03

标签: ruby-on-rails ruby-on-rails-3 postgresql segmentation-fault

我正在使用rails应用程序,我在其中填充了一个包含400万个数据行的表。当我尝试在我的视图中显示页面时显示没有数据!从服务器日志中我可以看到错误:

/Users/Rakib/.rvm/gems/ruby-1.9.3-p286@rails328/gems/activerecord-3.2.6/lib/active_record/connection_adapters/postgresql_adapter.rb:607: [BUG] Segmentation fault

最后显示以下消息:

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html

Abort trap: 6

我尝试使用较少数据量的同一个表,然后它完美地工作。这是因为单个表中有大量数据吗?我怎么解决这个问题?任何形式的帮助或建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

你很可能内存不足。

不是一次加载所有数百万行,而是将它们加载到块中并将它们复制到目的地,丢弃块,加载下一个块,然后重复。

您可以使用PostgreSQL cursorthe FETCH command执行此操作。在迭代结果集时,某些客户端库可以使用协议级游标;我不知道Ruby的Pg gem是否可以。

如果您使用的是ActiveRecord,请重新考虑。在批量事务中管理数百万行并不是一种理智的方式。如果可能的话,可以使用较低级别的SQL操作。