39 lines
1.1 KiB
Ruby
39 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class AddPrimaryKeyToElasticSearchIndexedNamespaces < ActiveRecord::Migration[6.0]
|
|
include Gitlab::Database::MigrationHelpers
|
|
|
|
DOWNTIME = false
|
|
|
|
UNIQUE_INDEX_NAME = 'index_elasticsearch_indexed_namespaces_on_namespace_id'
|
|
PRIMARY_KEY_NAME = 'elasticsearch_indexed_namespaces_pkey'
|
|
|
|
disable_ddl_transaction!
|
|
|
|
def up
|
|
with_lock_retries do
|
|
execute(<<~SQL)
|
|
LOCK TABLE elasticsearch_indexed_namespaces IN ACCESS EXCLUSIVE MODE;
|
|
|
|
DELETE FROM elasticsearch_indexed_namespaces
|
|
WHERE namespace_id IS NULL;
|
|
|
|
ALTER TABLE elasticsearch_indexed_namespaces
|
|
ADD CONSTRAINT #{PRIMARY_KEY_NAME} PRIMARY KEY USING INDEX #{UNIQUE_INDEX_NAME};
|
|
SQL
|
|
end
|
|
end
|
|
|
|
def down
|
|
add_concurrent_index :elasticsearch_indexed_namespaces, :namespace_id, unique: true, name: UNIQUE_INDEX_NAME
|
|
|
|
with_lock_retries do
|
|
execute(<<~SQL)
|
|
ALTER TABLE elasticsearch_indexed_namespaces
|
|
DROP CONSTRAINT #{PRIMARY_KEY_NAME},
|
|
ALTER COLUMN namespace_id DROP NOT NULL
|
|
SQL
|
|
end
|
|
end
|
|
end
|