namespace :db do
desc "Remove old job stderr entries from the logs table"
task delete_old_job_logs: :environment do
- Log.select("logs.id").
- joins("JOIN jobs ON object_uuid = jobs.uuid").
- where("event_type = :etype AND jobs.log IS NOT NULL AND jobs.finished_at < :age",
- etype: "stderr",
- age: Rails.configuration.clean_job_log_rows_after.ago).
- find_in_batches do |old_log_ids|
- Log.where(id: old_log_ids.map(&:id)).delete_all
- end
+ delete_sql = "DELETE FROM logs WHERE id in (SELECT logs.id FROM logs JOIN jobs ON logs.object_uuid = jobs.uuid WHERE event_type = 'stderr' AND jobs.log IS NOT NULL AND clock_timestamp() - jobs.finished_at > interval '#{Rails.configuration.clean_job_log_rows_after} seconds')"
+
+ ActiveRecord::Base.connection.execute(delete_sql)
end
end