为ActiveRecord测试创建数百万条记录

时间:2012-09-06 21:18:22

标签: ruby postgresql activerecord greenplum

在Ruby中,我有一个测试,它是ActiveSupport::TestCase的子类,并通过Postgres(实际上是Greenplum)数据库中的ActiveRecord子类访问表。对于一个特定的测试,我需要在一百万行的顺序填充表,但我真的不在乎那里有什么。我可以做类似

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

但这需要很长时间才能运行。我可以通过将它包装在一个事务中来使它快一点,这样create每次都不会创建一个新的,但这只会节省很多时间。

有没有一些很好的方法可以做到这一点,这样我就不必在表格中执行大量的伪值插入?

(注意:试图假装该表包含一百万条记录的东西不起作用,因为我后来需要与实际的行进行交互;对于这个特定的测试,我只是不在乎它们是什么)

1 个答案:

答案 0 :(得分:3)

在一个简单的查询中运行所有这些:

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

这应该很快填充数据库。我的笔记本电脑需要2秒钟。