Я делаю пакетное вставку с помощью следующего методаActiveRecord :: StatementInvalid SQLite3 :: BusyException: база данных заблокирована в Batch Insert
module DatabaseHelper
ActionHelper = ActionController::Base.helpers
CONN = ActiveRecord::Base.connection
def self.mass_sql_insert(klass, columns, values, batch_size = 500)
table = klass.constantize.table_name if klass.constantize.kind_of?(Class)
values.each_slice(batch_size) do |batch|
sql = ActionHelper.sanitize("INSERT INTO #{table} (#{columns.join(', ')}) VALUES #{batch.join(', ')}")
CONN.execute sql
end
end
Этот метод работал замечательно, но только недавно начал бросать следующее сообщение об ошибке:
ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked:
Что следует за этой ошибкой является командой sql insert, которую я пытаюсь выполнить. Когда я ставлю это прямо в dbconsole, он отлично работает. Какие-либо предложения?
Просто увеличивая время не решить мою проблему. как насчет изменения размера пула, чтобы он не пытался использовать одновременный доступ ...? Любые другие предложения – TheJKFever