Skip to content

Add unique index for security training providers

Jonathan Schafer requested to merge 350731-unique-index-for-provider-data into master

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

  1. Create an entry in the table
    Security::TrainingProvider.create!(name: 'Provider', description: 'Provider description', url: 'www.te
  2. Try to create the same entry again
    Security::TrainingProvider.create!(name: 'Provider', description: 'Provider description', url: 'www.test.com')
  3. 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.

Related to #350731

Edited by Jonathan Schafer

Merge request reports

Loading