У меня ошибка при импорте данных в 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
)
Другие вопросы по тегам