我正在尝试将数据从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数据库?我已查找了很多文档和错误消息,但尚未找到解决我问题的方法。
谢谢!
答案 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
,数据库充满了我需要的数据:)