Postgres - 循环插入内存不足

时间:2010-10-10 02:31:08

标签: ruby-on-rails postgresql activerecord

我正在解析一个包含几千个元素的XML文件,以便插入到sql数据库中。使用sqlite一切正常,但是postgres因为这个错误而死在我身上:

PGError: ERROR:  out of shared memory

我正在监视锁,看起来每个insert语句都有一个锁,虽然我只是循环遍历activerecord“save”调用(每个应该有一个事务),但这些锁似乎都是这样的一次打开几千个。

作为一项实验,我将保存调用包装在一个事务中:

Coupon.connection.transaction do  
  @coupon.save!
end

这似乎解决了我的锁定问题。但是,这似乎确实存在问题。谁知道它可能是什么?我正在使用“pg”驱动程序。

谢谢, 汤姆

1 个答案:

答案 0 :(得分:1)

您的服务器可能只是设置为仅使用少量共享内存 - http://www.postgresql.org/docs/8.1/static/kernel-resources.html非常好地详述了所有这些内容。尝试为初学者提高。几千个击败PostgreSQL的元素确实听起来很奇怪 - 你要存储的对象有多大?您的AR代码是什么样的?这里没有太多信息。