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
This commit is contained in:
parent
eab72755cd
commit
fd4ad65462
1 changed files with 17 additions and 3 deletions
|
@ -8,14 +8,28 @@ class MergeRequestDiffRemoveUniq < ActiveRecord::Migration
|
||||||
DOWNTIME = false
|
DOWNTIME = false
|
||||||
|
|
||||||
def up
|
def up
|
||||||
if index_exists?(:merge_request_diffs, :merge_request_id)
|
constraint_name = 'merge_request_diffs_merge_request_id_key'
|
||||||
remove_index :merge_request_diffs, :merge_request_id
|
|
||||||
|
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
|
||||||
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
|
end
|
||||||
|
|
||||||
|
def constraint_exists?(name)
|
||||||
|
indexes(:merge_request_diffs).map(&:name).include?(name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue