0

Rubyには、Postgres(実際にはGreenplum)データベースのサブクラスであり、サブクラスをActiveSupport::TestCase介してテーブルにアクセスするテストがあります。ActiveRecord特定のテストでは、100万行のオーダーでテーブルにデータを入力する必要がありますが、そこに何が含まれているかはあまり気にしません。私は次のようなことをすることができます

for i in 1...1000000 do
  MyTable.create(:column1 => 'value', :column2 => 'value')
end

しかし、これは実行に長い時間がかかります。create毎回新しいものを作成しないようにトランザクションでラップすることで少し速くすることができますが、それはそれほど多くの時間を節約するだけです。

テーブルに偽の値を大量に挿入する必要がないように、これを行うための良い方法はありますか?

(注:後で実際の行を操作する必要があるため、テーブルに100万個のレコードが含まれているように見せかけるためにスタブを作成しても機能しません。この特定のテストでは、それらが何であるかは気にしません)

4

1 に答える 1

4

これらすべてを次のような単純なクエリで実行します。

INSERT INTO mytable (col1, col2) 
SELECT 'value1', 'value2' 
FROM generate_series(1,1000000);

これにより、データベースにかなり高速にデータが入力されます。私のラップトップは2秒かかります。

于 2012-09-06T21:32:22.380 に答える