diff --git a/script/fixes/087_fix_post_fav_counts.rb b/script/fixes/087_fix_post_fav_counts.rb new file mode 100755 index 000000000..1dac66bca --- /dev/null +++ b/script/fixes/087_fix_post_fav_counts.rb @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby + +require_relative "base" + +with_confirmation do + # Fix posts that have a non-zero fav_count but no favorites. + records = Post.where("fav_count != 0").where.not(id: Favorite.select(:post_id).distinct) + puts "Fixing #{records.size} records" + records.update_all(fav_count: 0) +end + +with_confirmation do + # Fix posts that have a fav_count inconsistent with the favorites table. + records = Post.find_by_sql(<<~SQL.squish) + UPDATE posts + SET fav_count = true_count + FROM ( + SELECT post_id, COUNT(*) AS true_count + FROM favorites + GROUP BY post_id + ) true_counts + WHERE posts.id = post_id AND posts.fav_count != true_count + RETURNING posts.* + SQL + puts "Fixing #{records.size} records" +end