Commit fd4ad654 authored by Yorick Peterse's avatar Yorick Peterse

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
parent eab72755
...@@ -8,14 +8,28 @@ class MergeRequestDiffRemoveUniq < ActiveRecord::Migration ...@@ -8,14 +8,28 @@ class MergeRequestDiffRemoveUniq < ActiveRecord::Migration
DOWNTIME = false DOWNTIME = false
def up def up
constraint_name = 'merge_request_diffs_merge_request_id_key'
transaction do
if index_exists?(:merge_request_diffs, :merge_request_id) if index_exists?(:merge_request_diffs, :merge_request_id)
remove_index :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
end end
def down def down
unless index_exists?(:merge_request_diffs, :merge_request_id) 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 end
def constraint_exists?(name)
indexes(:merge_request_diffs).map(&:name).include?(name)
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment