Clean up duplicate indexes on ci_trigger_requests
Some installations somehow gained duplicate indexes on
ci_trigger_requests.trigger_id
.
As a result, upgrading to GitLab 12.4.0 may cause this error:
ArgumentError: Multiple indexes found on ci_trigger_requests columns [:trigger_id]. Specify an index name from ci_trigger_requests_trigger_id_idx, fk_rails_b8ec8b7245, index_ci_trigger_requests_on_trigger_id
This error comes from ActiveRecord's index_name_for_remove
(https://github.com/rails/rails/blob/b9ca94caea2ca6a6cc09abaffaad67b447134079/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb#L1240-L1244). This
method raises this exception if the remove_index
is ambiguous.
Since our end state is to remove all indexes on
ci_trigger_requests.trigger_id
, find the indexes that have this
signature and pass in an explicit name
to disambiguate the index to
drop.
Closes #34818 (closed)
Test output
$ RAILS_ENV=test bin/rails dbconsole
gitlabhq_test=# create index fk_rails_b8ec8b7245 on ci_trigger_requests (trigger_id);
CREATE INDEX
gitlabhq_test=# create index ci_trigger_requests_trigger_id_idx on ci_trigger_requests (trigger_id);
CREATE INDEX
$ RAILS_ENV=test bin/rake db:migrate:up VERSION=20191016072826
== 20191016072826 ReplaceCiTriggerRequestsIndex: migrating ====================
-- transaction_open?()
-> 0.0000s
-- index_exists?(:ci_trigger_requests, [:trigger_id, :id], {:order=>{:id=>:desc}, :algorithm=>:concurrently})
-> 0.0042s
-- execute("SET statement_timeout TO 0")
-> 0.0002s
-- add_index(:ci_trigger_requests, [:trigger_id, :id], {:order=>{:id=>:desc}, :algorithm=>:concurrently})
-> 0.0031s
-- execute("RESET ALL")
-> 0.0002s
-- indexes(:ci_trigger_requests)
-> 0.0023s
-- transaction_open?()
-> 0.0000s
-- select_one("SELECT current_setting('server_version_num') AS v")
-> 0.0003s
-- index_exists?(:ci_trigger_requests, [:trigger_id], {:name=>"ci_trigger_requests_trigger_id_idx", :algorithm=>:concurrently})
-> 0.0017s
-- execute("SET statement_timeout TO 0")
-> 0.0002s
-- remove_index(:ci_trigger_requests, {:name=>"ci_trigger_requests_trigger_id_idx", :algorithm=>:concurrently, :column=>[:trigger_id]})
-> 0.0032s
-- execute("RESET ALL")
-> 0.0002s
-- transaction_open?()
-> 0.0000s
-- select_one("SELECT current_setting('server_version_num') AS v")
-> 0.0003s
-- index_exists?(:ci_trigger_requests, [:trigger_id], {:name=>"fk_rails_b8ec8b7245", :algorithm=>:concurrently})
-> 0.0019s
-- execute("SET statement_timeout TO 0")
-> 0.0002s
-- remove_index(:ci_trigger_requests, {:name=>"fk_rails_b8ec8b7245", :algorithm=>:concurrently, :column=>[:trigger_id]})
-> 0.0026s
-- execute("RESET ALL")
-> 0.0002s
-- transaction_open?()
-> 0.0000s
-- select_one("SELECT current_setting('server_version_num') AS v")
-> 0.0003s
-- index_exists?(:ci_trigger_requests, [:trigger_id], {:name=>"index_ci_trigger_requests_on_trigger_id", :algorithm=>:concurrently})
-> 0.0018s
-- execute("SET statement_timeout TO 0")
-> 0.0002s
-- remove_index(:ci_trigger_requests, {:name=>"index_ci_trigger_requests_on_trigger_id", :algorithm=>:concurrently, :column=>[:trigger_id]})
-> 0.0024s
-- execute("RESET ALL")
-> 0.0002s
== 20191016072826 ReplaceCiTriggerRequestsIndex: migrated (0.0266s) ===========
Edited by Stan Hu