Skip to content

Enforce not null constraints for workspace personal_access_token_id

What does this MR do and why?

Enforce not null constraints for workspace personal_access_token_id foreign key

  1. We have verified the previous migration ran fine in the issue
  2. We finalize the previous migration, see doc
  3. We add a Rails ActiveRecord validator
  4. We add a not null constraint see doc

Related to #422149 (closed), migration MR Backfill existing workspaces with PATs (!131516 - merged)

Migration output

Migration output

Migrate

$ bin/rails db:migrate:up:main VERSION=20230918143333 RAILS_ENV=development
main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259570
main: == 20230918143333 FinalizeBackfillWorkspacePersonalAccessToken: migrating =====
main: -- transaction_open?()
main:    -> 0.0000s
main: == 20230918143333 FinalizeBackfillWorkspacePersonalAccessToken: migrated (0.0217s) 
main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259570

$ bin/rails db:migrate:up:main VERSION=20230918145641 RAILS_ENV=development
main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259906
main: == 20230918145641 AddNotNullConstraintPersonalAccessTokenInWorkspaces: migrating 
main: -- current_schema()
main:    -> 0.0007s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- execute("ALTER TABLE workspaces\nADD CONSTRAINT check_2a89035b04\nCHECK ( personal_access_token_id IS NOT NULL )\nNOT VALID;\n")
main:    -> 0.0007s
main: == 20230918145641 AddNotNullConstraintPersonalAccessTokenInWorkspaces: migrated (0.0248s) 

main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259906

Rollback

bin/rails db:migrate:down:main VERSION=20230918145641 RAILS_ENV=development
main: == [advisory_lock_connection] object_id: 227160, pg_backend_pid: 258858
main: == 20230918145641 AddNotNullConstraintPersonalAccessTokenInWorkspaces: reverting 
main: -- transaction_open?()
main:    -> 0.0000s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- execute("            ALTER TABLE workspaces\n            DROP CONSTRAINT IF EXISTS check_2a89035b04\n")
main:    -> 0.0008s
main: == 20230918145641 AddNotNullConstraintPersonalAccessTokenInWorkspaces: reverted (0.0117s) 
main: == [advisory_lock_connection] object_id: 227160, pg_backend_pid: 258858

$ bin/rails db:migrate:down:main VERSION=20230918143333 RAILS_ENV=development
main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259202
main: == 20230918143333 FinalizeBackfillWorkspacePersonalAccessToken: reverting =====
main: == 20230918143333 FinalizeBackfillWorkspacePersonalAccessToken: reverted (0.0035s) 
main: == [advisory_lock_connection] object_id: 227080, pg_backend_pid: 259202

How to set up and validate locally

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Alper Akgun

Merge request reports