diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2016-09-14 17:18:49 +0300 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2016-09-14 17:18:49 +0300 |
commit | fd4ad6546278aef904f02dffe106b41872a9068c (patch) | |
tree | 6adb12963dcdb05dbe48ba7c15cb3c041aac41f3 /db | |
parent | eab72755cd9e0ac7f9ba6d30ad877b3aef14841b (diff) |
Fix migration for removing MR diff indexes
For whatever reason on some PostgreSQL installations there would be a
separate UNIQUE constraint on the merge_request_id column. Rails'
index_exists?() returns false for this constraint (even when using the
full name), yet the indexes() method returns it.
This commit changes the migration so that the constraint is dropped as
well. MySQL installations don't appear to be affected.
Fixes gitlab-org/gitlab-ce#22136
Diffstat (limited to 'db')
-rw-r--r-- | db/migrate/20160725104020_merge_request_diff_remove_uniq.rb | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb b/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb index c8cbd2718ff..75a3eb15124 100644 --- a/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb +++ b/db/migrate/20160725104020_merge_request_diff_remove_uniq.rb @@ -8,14 +8,28 @@ class MergeRequestDiffRemoveUniq < ActiveRecord::Migration DOWNTIME = false def up - if index_exists?(:merge_request_diffs, :merge_request_id) - remove_index :merge_request_diffs, :merge_request_id + constraint_name = 'merge_request_diffs_merge_request_id_key' + + transaction do + if index_exists?(:merge_request_diffs, :merge_request_id) + remove_index(:merge_request_diffs, :merge_request_id) + end + + # In some bizarre cases PostgreSQL might have a separate unique constraint + # that we'll need to drop. + if constraint_exists?(constraint_name) && Gitlab::Database.postgresql? + execute("ALTER TABLE merge_request_diffs DROP CONSTRAINT IF EXISTS #{constraint_name};") + end end end def down unless index_exists?(:merge_request_diffs, :merge_request_id) - add_concurrent_index :merge_request_diffs, :merge_request_id, unique: true + add_concurrent_index(:merge_request_diffs, :merge_request_id, unique: true) end end + + def constraint_exists?(name) + indexes(:merge_request_diffs).map(&:name).include?(name) + end end |