2016-11-22 83 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

相關問題