Как вставить большой 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