将元素插入PostgreSQL数组而不覆盖它

时间:2015-07-17 10:23:55

标签: ruby-on-rails arrays ruby postgresql activerecord

我想在postgres中向数组列插入一些数据。

sample_model = MyModel.create
100.times do
  sample_model.array.push [Time.now.to_i, 1234]
  sample_model.save  
end

这需要0.5秒才能完成,效率非常低。此代码每次都会覆盖该数组。使用mongoDB和mongoid的相同代码大约需要0.08秒才能完成。

sample_model = MyMongoidModel.create
100.times do
  sample_model.push(array: [[Time.now.to_i, 1234]]) 
end

有没有办法像mongo那样向postgres数组列插入一个元素呢?我甚至会考虑任何纯SQL解决方案。

2 个答案:

答案 0 :(得分:0)

SQL解决方案:

class MyModel < ActiveRecord::Base
  has_many :time_entries, dependent: :destroy, inverse_of: :my_model
end

class TimeEntry < ActiveRecord::Base
  belongs_to :my_model, inverse_of :time_entries
  validates_presence_of: time
end

100.times {MyModel.last.time_entries.create(time: Time.now)}

答案 1 :(得分:0)

你读过这个:https://www.coffeepowered.net/2009/01/23/mass-inserting-data-in-rails-without-killing-your-performance/

我认为选项3 - 单个质量插入是您正在寻找的。