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:
Ben Halpern 2023-06-26 09:06:18 -04:00 committed by GitHub
parent 923f66174d
commit 479f7b6c6c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 45 additions and 1 deletions

View 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

View file

@ -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

View file

@ -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"