Add unique index constraint to segmented users (#19627)
* Add unique index constraint to segmented users * Run migration * Add de-duping query
This commit is contained in:
parent
923f66174d
commit
479f7b6c6c
3 changed files with 45 additions and 1 deletions
18
db/migrate/20230622151208_remove_existing_segmented_users.rb
Normal file
18
db/migrate/20230622151208_remove_existing_segmented_users.rb
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class RemoveExistingSegmentedUsers < ActiveRecord::Migration[7.0]
|
||||
def up
|
||||
sql = <<-SQL
|
||||
DELETE FROM segmented_users deduped_seg_users
|
||||
USING segmented_users current_seg_users
|
||||
WHERE
|
||||
deduped_seg_users.id < current_seg_users.id AND
|
||||
deduped_seg_users.user_id = current_seg_users.user_id AND
|
||||
deduped_seg_users.audience_segment_id = current_seg_users.audience_segment_id;
|
||||
SQL
|
||||
|
||||
ActiveRecord::Base.connection.execute(sql)
|
||||
end
|
||||
|
||||
def down
|
||||
raise ActiveRecord::IrreversibleMigration
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
class AddUniqueConstraintToSegmentedUsers < ActiveRecord::Migration[7.0]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
# remove the old index first
|
||||
remove_index :segmented_users, name: "index_segmented_users_on_audience_segment_and_user", algorithm: :concurrently
|
||||
|
||||
# add a new index with uniqueness constraint
|
||||
add_index :segmented_users,
|
||||
%i[audience_segment_id user_id],
|
||||
unique: true,
|
||||
name: "index_segmented_users_on_audience_segment_and_user",
|
||||
algorithm: :concurrently
|
||||
end
|
||||
|
||||
def down
|
||||
# to reverse the migration, remove the unique index
|
||||
remove_index :segmented_users, name: "index_segmented_users_on_audience_segment_and_user", algorithm: :concurrently
|
||||
|
||||
# and add back the old index
|
||||
add_index :segmented_users,
|
||||
%i[audience_segment_id user_id],
|
||||
name: "index_segmented_users_on_audience_segment_and_user",
|
||||
algorithm: :concurrently
|
||||
end
|
||||
end
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema[7.0].define(version: 2023_06_08_154310) do
|
||||
ActiveRecord::Schema[7.0].define(version: 2023_06_22_151553) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "citext"
|
||||
enable_extension "pg_trgm"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue