Skip to content

Clean up schema of the "merge_requests" table

Yorick Peterse requested to merge merge-requests-schema-cleanup into master

This cleans up the schema of merge_requests as outlined in https://gitlab.com/gitlab-org/gitlab-ce/issues/31825.

Migration Output

Output
== 20171114150259 MergeRequestsAuthorIdForeignKey: migrating ==================
-- transaction_open?()
   -> 0.0000s
-- execute("SET statement_timeout TO 0")
   -> 0.0002s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_e719a85f8a\nFOREIGN KEY (author_id)\nREFERENCES users (id)\nON DELETE SET NULL\nNOT VALID;\n")
   -> 0.0141s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_e719a85f8a;")
   -> 0.0037s
== 20171114150259 MergeRequestsAuthorIdForeignKey: migrated (0.1782s) =========
== 20171114160005 MergeRequestsAssigneeIdForeignKey: migrating ================
-- transaction_open?()
-> 0.0001s
-- execute("SET statement_timeout TO 0")
-> 0.0011s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_6149611a04\nFOREIGN KEY (assignee_id)\nREFERENCES users (id)\nON DELETE SET NULL\nNOT VALID;\n")
-> 0.0078s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_6149611a04;")
-> 0.0069s
== 20171114160005 MergeRequestsAssigneeIdForeignKey: migrated (0.0219s) =======
== 20171114160904 MergeRequestsUpdatedByIdForeignKey: migrating ===============
-- transaction_open?()
-> 0.0000s
-- execute("SET statement_timeout TO 0")
-> 0.0003s
-- add_index(:merge_requests, :updated_by_id, {:where=>"updated_by_id IS NOT NULL", :algorithm=>:concurrently})
-> 0.0253s
-- transaction_open?()
-> 0.0000s
-- execute("SET statement_timeout TO 0")
-> 0.0009s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_641731faff\nFOREIGN KEY (updated_by_id)\nREFERENCES users (id)\nON DELETE SET NULL\nNOT VALID;\n")
-> 0.0077s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_641731faff;")
-> 0.0097s
== 20171114160904 MergeRequestsUpdatedByIdForeignKey: migrated (0.0468s) ======
== 20171114161720 MergeRequestsMergeUserIdForeignKey: migrating ===============
-- transaction_open?()
-> 0.0001s
-- execute("SET statement_timeout TO 0")
-> 0.0015s
-- add_index(:merge_requests, :merge_user_id, {:where=>"merge_user_id IS NOT NULL", :algorithm=>:concurrently})
-> 0.0204s
-- transaction_open?()
-> 0.0000s
-- execute("SET statement_timeout TO 0")
-> 0.0007s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_ad525e1f87\nFOREIGN KEY (merge_user_id)\nREFERENCES users (id)\nON DELETE SET NULL\nNOT VALID;\n")
-> 0.0037s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_ad525e1f87;")
-> 0.0062s
== 20171114161720 MergeRequestsMergeUserIdForeignKey: migrated (0.0410s) ======
== 20171114161914 MergeRequestsSourceProjectIdForeignKey: migrating ===========
-- transaction_open?()
-> 0.0000s
-- execute("SET statement_timeout TO 0")
-> 0.0006s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_3308fe130c\nFOREIGN KEY (source_project_id)\nREFERENCES projects (id)\nON DELETE SET NULL\nNOT VALID;\n")
-> 0.0049s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_3308fe130c;")
-> 0.0047s
== 20171114161914 MergeRequestsSourceProjectIdForeignKey: migrated (0.0141s) ==
== 20171114162227 MergeRequestsMilestoneIdForeignKey: migrating ===============
-- transaction_open?()
-> 0.0000s
-- execute("SET statement_timeout TO 0")
-> 0.0002s
-- execute("ALTER TABLE merge_requests\nADD CONSTRAINT fk_6a5165a692\nFOREIGN KEY (milestone_id)\nREFERENCES milestones (id)\nON DELETE SET NULL\nNOT VALID;\n")
-> 0.0054s
-- execute("ALTER TABLE merge_requests VALIDATE CONSTRAINT fk_6a5165a692;")
-> 0.0078s
== 20171114162227 MergeRequestsMilestoneIdForeignKey: migrated (0.0214s) ======

Database Checklist

When adding migrations:

  • Updated db/schema.rb
  • Added a down method so the migration can be reverted
  • Added the output of the migration(s) to the MR body
  • Added the execution time of the migration(s) to the MR body
  • Made sure the migration won't interfere with a running GitLab cluster, for example by disabling transactions for long running migrations

When adding indexes:

  • Described the need for these indexes in the MR body
    • These are necessary for a few foreign keys
  • Made sure existing indexes can not be reused instead

When adding foreign keys to existing tables:

  • Included a migration to remove orphaned rows in the source table
  • Removed any instances of dependent: ... that may no longer be necessary

General Checklist

Edited by Sean McGivern

Merge request reports