У меня ошибка при импорте данных в postgresql из csv файла с `sequel`
Я пытаюсь импортировать данные в postgresql из CSV-файлов следующим образом.
csv = CSV.open(path, { col_sep: ',', headers: :first_row })
MatchDB.db.copy_into(:property,
data: csv,
format: :csv
)
Но я получил такую ошибку.
TypeError: wrong argument type CSV::Row (expected String)
Кто-нибудь знает, как я могу это исправить?
1 ответ
Решение
Как вы можете видеть в Sequel
тесты Database#copy_into
метод ожидает строку со столбцами, разделенными запятыми, и строк, разделенных разделителем строк \n
,
Вы пытаетесь передать внутренний рубин CSV
представление, которое [вообще говоря, своего рода] массив массивов. Я не гуру в рубине CSV
, но чтобы сделать из него правильную строку, можно использовать:
csv.map { |row| row.join ',' }.join "\n"
Подведение итогов:
csv = CSV.open(path, { col_sep: ',', headers: :first_row })
MatchDB.db.copy_into(:property,
data: csv.map { |row| row.join ',' }.join "\n",
format: :csv
)