Как вставить большой CSV в столбец CLOB с помощью DB2/Rails

Проблема: у меня есть большой CSV, который я хочу вставить в таблицу DB2 с помощью Rails

Описание: CSV составляет около 2 000 строк /8 000 символов. Столбец CLOB настроен для обработки более 10 000 символов. Я могу просто вставить CSV через консоль базы данных RubyMine. Однако мое приложение вылетает.

ActiveRecord производит один огромный запрос вставки. Код:

Logger.create(csv: csv_data.to_s)

DB2 возвращает ошибку:

 ActiveRecord::JDBCError: [SQL0102] String constant beginning with 'foobar' too long.

Я могу вставлять огромные PDF-файлы в BLOB-столбцы, просто используя подобный код. Я попытался сначала создать запись, а затем обновить ее данными, без разницы.

Эта проблема такая же, как эта. За исключением того, что мне нужно решение Rails, а не общее

1 ответ

Решение

Нашел взломать вокруг этого, разделив csv_data на куски и добавив их в колонку

update_attribute(:csv, '') if self.csv.nil? # Can't CONCAT to nil

# Split csv_data into chunks, concatenate each one to the field
csv_data.scan(/.{1,6144}/m).each do |part|
  parm =  ActiveRecord::Base.connection.quote(part)
  ActiveRecord::Base.connection.execute("update #{Logger.table_name} set csv = CONCAT(csv, #{parm}) where id = #{self.id}")
end
Другие вопросы по тегам