如何使用 DB2/Rails 将大型 CSV 文件插入 CLOB 列
How to insert large CSV into a CLOB column with DB2/Rails
问题:我有一个很大的 CSV,我想用 Rails
插入 DB2 table
说明:CSV 文件大约有 2k lines/8K 个字符。 CLOB 列设置为处理超过 10K 个字符。我可以通过 RubyMine 数据库控制台很好地插入 CSV。但是我的应用程序崩溃了。
ActiveRecord 产生一个巨大的插入查询。代码:
Logger.create(csv: csv_data.to_s)
DB2 returns 一个错误:
ActiveRecord::JDBCError: [SQL0102] String constant beginning with 'foobar' too long.
我可以使用类似的代码将巨大的 PDF 文件插入到 BLOB 列中。我试着先创建记录,然后用数据更新它,没有区别。
这个问题和一样。除了我需要一个 Rails 解决方案,而不是一般的
通过将 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
问题:我有一个很大的 CSV,我想用 Rails
插入 DB2 table说明:CSV 文件大约有 2k lines/8K 个字符。 CLOB 列设置为处理超过 10K 个字符。我可以通过 RubyMine 数据库控制台很好地插入 CSV。但是我的应用程序崩溃了。
ActiveRecord 产生一个巨大的插入查询。代码:
Logger.create(csv: csv_data.to_s)
DB2 returns 一个错误:
ActiveRecord::JDBCError: [SQL0102] String constant beginning with 'foobar' too long.
我可以使用类似的代码将巨大的 PDF 文件插入到 BLOB 列中。我试着先创建记录,然后用数据更新它,没有区别。
这个问题和
通过将 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