diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-04-06 13:54:09 +0300 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-04-06 13:54:09 +0300 |
commit | dc20dd1b3d69bfcd503f4dfe1b89f49bf7083844 (patch) | |
tree | 0080795810d35881352af23d3ef495af66eed1f9 /lib | |
parent | 9c2979ecdf7f65419232c0193389e3cccca27ba5 (diff) | |
parent | 9997c58fc0db6469cde1a21428e050aa7b550a9a (diff) |
Merge branch 'add_remove_concurrent_index_to_database_helper' into 'master'
Add remove_concurrent_index to database helper
Closes #30376
See merge request !10441
Diffstat (limited to 'lib')
-rw-r--r-- | lib/gitlab/database/migration_helpers.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb index fc445ab9483..525aa920328 100644 --- a/lib/gitlab/database/migration_helpers.rb +++ b/lib/gitlab/database/migration_helpers.rb @@ -26,6 +26,30 @@ module Gitlab add_index(table_name, column_name, options) end + # Removes an existed index, concurrently when supported + # + # On PostgreSQL this method removes an index concurrently. + # + # Example: + # + # remove_concurrent_index :users, :some_column + # + # See Rails' `remove_index` for more info on the available arguments. + def remove_concurrent_index(table_name, column_name, options = {}) + if transaction_open? + raise 'remove_concurrent_index can not be run inside a transaction, ' \ + 'you can disable transactions by calling disable_ddl_transaction! ' \ + 'in the body of your migration class' + end + + if Database.postgresql? + options = options.merge({ algorithm: :concurrently }) + disable_statement_timeout + end + + remove_index(table_name, options.merge({ column: column_name })) + end + # Adds a foreign key with only minimal locking on the tables involved. # # This method only requires minimal locking when using PostgreSQL. When |