Just create new hash instead of enforcing unique hash

This commit is contained in:
Max Wofford
2025-03-05 02:23:37 -05:00
parent 01e396910e
commit 34dc749344
2 changed files with 22 additions and 19 deletions

View File

@@ -0,0 +1,20 @@
class OneTime::GenerateUniqueHeartbeatHashesJob < ApplicationJob
queue_as :default
def perform
Heartbeat.find_each do |heartbeat|
heartbeat.send(:set_fields_hash!)
heartbeat.save!
end
# error if any two heartbeats have the same fields_hash
duplicates = false
Heartbeat.group(:fields_hash).having("count(*) > 1").count.each do |fields_hash, count|
puts "Duplicate fields_hash: #{fields_hash} (count: #{count})"
duplicates = true
end
raise "Duplicate in fields_hash" if duplicates
end
end

View File

@@ -24,28 +24,11 @@ class UniquenessIndexToHashOnHeartbeats < ActiveRecord::Migration[8.0]
:is_write
]
add_column :heartbeats, :fields_hash, :text
Heartbeat.find_each do |heartbeat|
heartbeat.send(:set_fields_hash!)
heartbeat.save!
end
# error if any two heartbeats have the same fields_hash
duplicates = false
Heartbeat.group(:fields_hash).having("count(*) > 1").count.each do |fields_hash, count|
puts "Duplicate fields_hash: #{fields_hash} (count: #{count})"
duplicates = true
end
raise "Duplicate in fields_hash" if duplicates
change_column_null :heartbeats, :fields_hash, false
add_index :heartbeats, :fields_hash, unique: true
# clean up the index from ./20250303180842_create_heartbeats.rb
remove_index :heartbeats,
attributes,
unique: true
add_column :heartbeats, :fields_hash, :text
end
end