2016-11-22 88 views
0

我正在为用户建立日记以跟踪他的日常支出。但是,我已经拥有了csv文件,可以将1751条记录导入到我的支出表中。我通过rake任务来完成此任务。在Heroku PG数据库中csv导入后的Rails ID序列

导入工作正常。当我在开发中(SQLite)这样做,并想通过创建操作创建新记录时,新记录保存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

尝试循环之前加入这一行

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

这将改变id

+0

的价值也许这是不是100%清楚我想要: – Oliver

+0

你能清楚吗? –

+0

对不起,我的评论并没有全部保存。我想通过csv导入将数据上传到数据库(1751记录初始填充数据库),然后定期使用应用程序(之后通过“新”视图中的表单添加新记录)。但是,当我第一次上传1751记录(其产生1至1751的ID)并且之后想要使用标准格式来添加记录时,PG尝试保存以ID = 1开头的这些记录(就像我没有上传任何数据之前)。在开发过程中,SQLite确实添加了以ID 1752开头的这些新记录。 – Oliver

相关问题