在Heroku PG数据库中导入csv之后的Rails ID序列

时间:2016-11-22 06:59:49

标签: ruby-on-rails postgresql csv import

我正在为用户建立日记以跟踪他的日常开支。但是,我已经拥有csv文件,该文件包含我将导入到支出表的1751条记录。我是通过rake任务完成的。

导入正常。当我在开发中这样做(SQLite)并想通过create action创建一个新记录时,新记录保存ID 1752(这是正确的)。

如果我在生产中这样做(Heroku / PostgreSQL),Postgres会尝试使用ID 1创建新记录,这显然会导致错误(因为已经采用了第一个1751 ID)。

我的问题:如何解决这个问题,以便Postgres ID序列以ID 1752而不是ID 1开头(就像开发中的SQLite一样)?

import_expenditure.rake

require 'csv'

namespace :csv do

  desc "Import CSV Data from Expenditures data"
  task :import_expenditures => :environment do
    Expenditure.delete_all
    csv_file_path = 'db/exp_data.csv'

    CSV.foreach(csv_file_path) do |row|

        Expenditure.create!({
          :id => row[0],
          :day => row[1],
          :value => row[2],  
          :description => row[3],
          :cost_type => row[4],
          :category_id => row[5],
          :user_id => row[6]
        })
        puts "Row added!"

    end
  end
end

1 个答案:

答案 0 :(得分:1)

尝试在循环之前添加此行

ActiveRecord::Base.connection.execute("SELECT setval('expenditures_id_seq', 1752);"

这会更改id

的值