我正在为用户建立日记以跟踪他的日常开支。但是,我已经拥有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
答案 0 :(得分:1)
尝试在循环之前添加此行
ActiveRecord::Base.connection.execute("SELECT setval('expenditures_id_seq', 1752);"
这会更改id
列