-1

我正在开发一个 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

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

4

1 回答 1

2

您很可能内存不足。

与其一次加载所有数百万行,不如以块的形式加载它们并将它们复制到目的地,丢弃该块,加载下一个块,然后重复。

您可以使用 PostgreSQL游标命令FETCH执行此操作。一些客户端库在遍历结果集时可以使用协议级游标;不知道Ruby的Pggem能不能。

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

于 2013-02-17T23:34:23.830 回答