Posted at

RailsのログからSQLクエリを抽出してデータベースに入れ直すスクリプト

More than 1 year has passed since last update.

泣きながら書いたのでメモ。


  • Railsのログから INSERTUPDATE を抜き出して実行します。他は不要だったので手をつけていません。

require 'active_record'

ActiveRecord::Base.establish_connection(
adapter:'sqlite3',
database:'target.sqlite3'
)

def execute_with_params(sql, params = [])
sql = ActiveRecord::Base.send(:sanitize_sql_array, [sql, *params.to_h.values])
ActiveRecord::Base.connection.execute(sql)
end

while line = gets&.gsub(/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]/, '')
case line
when /INSERT/
turai = line.scan(/^., \[.+\] DEBUG -- : SQL \(.+\) (.+VALUES \(.+\)) (.+)$/).flatten
sql = turai[0]
params = eval(turai[1])
execute_with_params(sql, params)
when /UPDATE/
turai = line.scan(/^., \[.+\] DEBUG -- : SQL \(.+\) (.+) (.+)$/).flatten
sql = turai[0]
params = eval(turai[1])
execute_with_params(sql, params)
else
end
end