Add unique index for security training providers
What does this MR do and why?
This MR adds a uniqueness constraint so we can use ensure we only have one record of each training provider, and we can use an upsert when adding/updating training providers.
This table is currently empty (see https://console.postgres.ai/gitlab/gitlab-production-tunnel-pg12/sessions/8962/commands/31674)
Screenshots or screen recordings
Migration
rails db:migrate
== 20220304201847 AddUniqueIndexOnSecurityTrainingProviders: migrating ========
-- transaction_open?()
-> 0.0000s
-- index_exists?(:security_training_providers, :name, {:unique=>true, :name=>"index_security_training_providers_on_unique_name", :algorithm=>:concurrently})
-> 0.0047s
-- execute("SET statement_timeout TO 0")
-> 0.0005s
-- add_index(:security_training_providers, :name, {:unique=>true, :name=>"index_security_training_providers_on_unique_name", :algorithm=>:concurrently})
-> 0.0051s
-- execute("RESET statement_timeout")
-> 0.0005s
== 20220304201847 AddUniqueIndexOnSecurityTrainingProviders: migrated (0.0211s)
rails db:rollback
== 20220304201847 AddUniqueIndexOnSecurityTrainingProviders: reverting ========
-- transaction_open?()
-> 0.0000s
-- indexes(:security_training_providers)
-> 0.0026s
-- execute("SET statement_timeout TO 0")
-> 0.0006s
-- remove_index(:security_training_providers, {:algorithm=>:concurrently, :name=>"index_security_training_providers_on_unique_name"})
-> 0.0032s
-- execute("RESET statement_timeout")
-> 0.0006s
== 20220304201847 AddUniqueIndexOnSecurityTrainingProviders: reverted (0.0092s)
How to set up and validate locally
- Create an entry in the table
Security::TrainingProvider.create!(name: 'Provider', description: 'Provider description', url: 'www.te
- Try to create the same entry again
Security::TrainingProvider.create!(name: 'Provider', description: 'Provider description', url: 'www.test.com')
- Should result in an errror
MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
-
I have evaluated the MR acceptance checklist for this MR.
Related to #350731
Edited by Jonathan Schafer