diff options
Diffstat (limited to 'db/migrate/20200305020459_add_label_restore_foreign_keys.rb')
-rw-r--r-- | db/migrate/20200305020459_add_label_restore_foreign_keys.rb | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/db/migrate/20200305020459_add_label_restore_foreign_keys.rb b/db/migrate/20200305020459_add_label_restore_foreign_keys.rb new file mode 100644 index 00000000000..4b7c68cb20b --- /dev/null +++ b/db/migrate/20200305020459_add_label_restore_foreign_keys.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +class AddLabelRestoreForeignKeys < ActiveRecord::Migration[6.0] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + disable_ddl_transaction! + + def up + # create foreign keys + connection.foreign_keys(labels_table_name).each do |fk| + fk_options = fk.options + add_concurrent_foreign_key(backup_labels_table_name, fk.to_table, name: fk.name, column: fk_options[:column]) + end + end + + def down + connection.foreign_keys(backup_labels_table_name).each do |fk| + with_lock_retries do + remove_foreign_key backup_labels_table_name, name: fk.name + end + end + end + + private + + def labels_table_name + :labels + end + + def backup_labels_table_name + :backup_labels + end +end |