summaryrefslogtreecommitdiff
path: root/db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb
diff options
context:
space:
mode:
Diffstat (limited to 'db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb')
-rw-r--r--db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb b/db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb
new file mode 100644
index 00000000000..2977917f2d1
--- /dev/null
+++ b/db/migrate/20161206153749_remove_uniq_path_index_from_namespace.rb
@@ -0,0 +1,36 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class RemoveUniqPathIndexFromNamespace < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ DOWNTIME = false
+
+ def up
+ constraint_name = 'namespaces_path_key'
+
+ transaction do
+ if index_exists?(:namespaces, :path)
+ remove_index(:namespaces, :path)
+ 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 namespaces DROP CONSTRAINT IF EXISTS #{constraint_name};")
+ end
+ end
+ end
+
+ def down
+ unless index_exists?(:namespaces, :path)
+ add_concurrent_index(:namespaces, :path, unique: true)
+ end
+ end
+
+ def constraint_exists?(name)
+ indexes(:namespaces).map(&:name).include?(name)
+ end
+end