将数据从CSV导入PSQL

时间:2014-06-28 17:49:51

标签: ruby-on-rails postgresql csv

我正在尝试将数据从CSV导入PSQL数据库。我找到了一个很好的例子,说明如何在堆栈溢出时从csv复制数据,如下所示(只有文件路径不同)。

\COPY manjadata FROM '/filepath/data.csv' DELIMITER ',' CSV;

然而,这在第一行打破,给我错误消息:

ERROR:  invalid input syntax for integer: "address"
CONTEXT:  COPY data, line 1, column id: "address"

我的表格设置如下:

class Data < ActiveRecord::Migration
  def change
     create_table :data do |t|
      t.string :address
      t.string :city
      t.string :state
      t.integer :zip
      t.string :name

      t.timestamps
    end
  end
end

CSV如下所示:

address,city,state,zip,name,url
211 Hanover St,Boston,MA,2113,Mother Anna's,http://motheranna.com/
226 Hanover St,Boston,MA,2113,Lucca,http://www.luccaboston.com/
227 Hanover St,Boston,MA,2113,Cobblestone,http://www.CobblestoneNe.com

如何在不破坏的情况下将此csv导入psql数据库?我已查找了很多文档和错误消息,但尚未找到解决我问题的方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试运行以下命令,使用以下CSV

导入数据
address,city,state,zip,name
211 Hanover St,Boston,MA,2113,Mother Anna's
226 Hanover St,Boston,MA,2113,Lucca
227 Hanover St,Boston,MA,2113,Cobblestone

命令

 \COPY data(address,city,state,zip,name) FROM 'path/data.csv' DELIMITER ',' CSV header;

请注意,该网址已从CSV中删除,因为它不在数据库

答案 1 :(得分:1)

我最终只是使用种子文件导入数据,如下所示:

seeds.rb内部:

require 'csv'

datafile = Rails.root + 'db/data.csv'

CSV.foreach(datafile, headers: true) do |row|

  Data.find_or_create_by({address: row[0]}) do |hr|
    hr.address = row[0]
    hr.city =  row[1]
    hr.state =  row[2]
    hr.zip =  row[3]
    hr.name =  row[4]
  end

end

然后,我只需将data.csv放入db文件夹,其中CSV格式相同(如下所示):

address,city,state,zip,name
211 Hanover St,Boston,MA,2113,Mother Anna's,http://motheranna.com/
226 Hanover St,Boston,MA,2113,Lucca,http://www.luccaboston.com/
227 Hanover St,Boston,MA,2113,Cobblestone,http://www.CobblestoneNe.com

最后,我运行rake db:seed,数据库充满了我需要的数据:)