-1

私は、400万のデータ行をテーブルに入力するRailsアプリに取り組んでいます。ビューにページを表示しようとすると、データが表示されません!サーバーログから、エラーを確認できます。

/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カーソルコマンドを使用して実行できます。一部のクライアントライブラリは、結果セットを反復処理するときにプロトコルレベルのカーソルを使用できます。Rubyの宝石ができるかどうかはわかりません。FETCHPg

ActiveRecordを使用している場合は、再検討してください。これは、一括トランザクションで数百万行を管理するための適切な方法ではありません。可能であれば、低レベルのSQL操作でそれを行います。

于 2013-02-17T23:34:23.830 に答える