Update instance_integrations table to match integrations schema
What does this MR do and why?
This MR updates instance_integrations table to align the schema with existing integrations table. We previously added instance_integrations table in 405c8b0a as part of Cells architecture in order to split integrations table into instance/non-instance integrations. However, when the table was introduced, we stripped it from the columns that are not needed in instance integrations (project_id/group_id/inherit_from_id/instance columns). We then discovered it would be better to have the schema aligned between the two tables in order to provide a smoother transition for the new instance integrations migration.
This MR:
- Adds
project_id/group_id/inherit_from_id/instancedb columns to instance_integrations table - Adds IS NULL constraints to project_id/group_id/inherit_from_id, since instance integrations cannot have these values
- Adds INSTANCE=true constraint to instance column, since instance integrations are always instance wide
- Renames STI column
typetotype_new, since that's how it's called inintegrations
Note that this table is not currently used and is empty, so I am making all these changes within a single migration.
Migration output
Up
main: == [advisory_lock_connection] object_id: 127040, pg_backend_pid: 79523
main: == 20241023091427 UpdateInstanceIntegrationsTable: migrating ==================
main: -- add_column(:instance_integrations, :project_id, :bigint, {:null=>true})
main: -> 0.0024s
main: -- add_column(:instance_integrations, :group_id, :bigint, {:null=>true})
main: -> 0.0007s
main: -- add_column(:instance_integrations, :inherit_from_id, :bigint, {:null=>true})
main: -> 0.0006s
main: -- add_column(:instance_integrations, :instance, :boolean, {:default=>true})
main: -> 0.0017s
main: -- rename_column(:instance_integrations, :type, :type_new)
main: -> 0.0199s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT project_id_null_constraint\nCHECK ( project_id IS NULL )\nNOT VALID;\n")
main: -> 0.0016s
main: -- execute("SET statement_timeout TO 0")
main: -> 0.0004s
main: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT project_id_null_constraint;")
main: -> 0.0010s
main: -- execute("RESET statement_timeout")
main: -> 0.0003s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT group_id_null_constraint\nCHECK ( group_id IS NULL )\nNOT VALID;\n")
main: -> 0.0006s
main: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT group_id_null_constraint;")
main: -> 0.0006s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT inherit_from_id_null_constraint\nCHECK ( inherit_from_id IS NULL )\nNOT VALID;\n")
main: -> 0.0005s
main: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT inherit_from_id_null_constraint;")
main: -> 0.0009s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- transaction_open?(nil)
main: -> 0.0000s
main: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT instance_is_true_constraint\nCHECK ( instance = TRUE )\nNOT VALID;\n")
main: -> 0.0006s
main: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT instance_is_true_constraint;")
main: -> 0.0005s
main: == 20241023091427 UpdateInstanceIntegrationsTable: migrated (0.0646s) =========
main: == [advisory_lock_connection] object_id: 127040, pg_backend_pid: 79523
ci: == [advisory_lock_connection] object_id: 127460, pg_backend_pid: 79525
ci: == 20241023091427 UpdateInstanceIntegrationsTable: migrating ==================
ci: -- add_column(:instance_integrations, :project_id, :bigint, {:null=>true})
ci: -> 0.0021s
ci: -- add_column(:instance_integrations, :group_id, :bigint, {:null=>true})
ci: -> 0.0005s
ci: -- add_column(:instance_integrations, :inherit_from_id, :bigint, {:null=>true})
ci: -> 0.0006s
ci: -- add_column(:instance_integrations, :instance, :boolean, {:default=>true})
ci: -> 0.0021s
ci: -- rename_column(:instance_integrations, :type, :type_new)
ci: -> 0.0017s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT project_id_null_constraint\nCHECK ( project_id IS NULL )\nNOT VALID;\n")
ci: -> 0.0010s
ci: -- execute("SET statement_timeout TO 0")
ci: -> 0.0003s
ci: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT project_id_null_constraint;")
ci: -> 0.0008s
ci: -- execute("RESET statement_timeout")
ci: -> 0.0003s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT group_id_null_constraint\nCHECK ( group_id IS NULL )\nNOT VALID;\n")
ci: -> 0.0005s
ci: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT group_id_null_constraint;")
ci: -> 0.0004s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT inherit_from_id_null_constraint\nCHECK ( inherit_from_id IS NULL )\nNOT VALID;\n")
ci: -> 0.0004s
ci: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT inherit_from_id_null_constraint;")
ci: -> 0.0004s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- transaction_open?(nil)
ci: -> 0.0000s
ci: -- execute("ALTER TABLE instance_integrations\nADD CONSTRAINT instance_is_true_constraint\nCHECK ( instance = TRUE )\nNOT VALID;\n")
ci: -> 0.0004s
ci: -- execute("ALTER TABLE instance_integrations VALIDATE CONSTRAINT instance_is_true_constraint;")
ci: -> 0.0009s
ci: == 20241023091427 UpdateInstanceIntegrationsTable: migrated (0.0384s) =========
Down
main: == [advisory_lock_connection] object_id: 126640, pg_backend_pid: 81248
main: == 20241023091427 UpdateInstanceIntegrationsTable: reverting ==================
main: -- remove_column(:instance_integrations, :project_id, {:if_exists=>true})
main: -> 0.0218s
main: -- remove_column(:instance_integrations, :group_id, {:if_exists=>true})
main: -> 0.0023s
main: -- remove_column(:instance_integrations, :inherit_from_id, {:if_exists=>true})
main: -> 0.0019s
main: -- remove_column(:instance_integrations, :instance, {:if_exists=>true})
main: -> 0.0027s
main: -- rename_column(:instance_integrations, :type_new, :type)
main: -> 0.0021s
main: == 20241023091427 UpdateInstanceIntegrationsTable: reverted (0.0349s) =========
main: == [advisory_lock_connection] object_id: 126640, pg_backend_pid: 81248
ci: == [advisory_lock_connection] object_id: 126580, pg_backend_pid: 81657
ci: == 20241023091427 UpdateInstanceIntegrationsTable: reverting ==================
ci: -- remove_column(:instance_integrations, :project_id, {:if_exists=>true})
ci: -> 0.0158s
ci: -- remove_column(:instance_integrations, :group_id, {:if_exists=>true})
ci: -> 0.0020s
ci: -- remove_column(:instance_integrations, :inherit_from_id, {:if_exists=>true})
ci: -> 0.0017s
ci: -- remove_column(:instance_integrations, :instance, {:if_exists=>true})
ci: -> 0.0023s
ci: -- rename_column(:instance_integrations, :type_new, :type)
ci: -> 0.0016s
ci: == 20241023091427 UpdateInstanceIntegrationsTable: reverted (0.0318s) =========
ci: == [advisory_lock_connection] object_id: 126580, pg_backend_pid: 81657
Mentions #474809 (closed)
Update instance_integrations table to match integrations schema
- Add project_id/group_id/inherit_from_id columns to match existing integrations table for easier transition of data
- Add IS NULL constraints to project_id/group_id/inherit_from_id since these values will always be null for instance integrations
- Add instance=true constraint
Changelog: other
MR acceptance checklist
Please evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
Screenshots or screen recordings
Screenshots are required for UI changes, and strongly recommended for all other merge requests.
| Before | After |
|---|---|
How to set up and validate locally
Numbered steps to set up and validate the change are strongly suggested.

