Closed
Description
[SIP] Proposal for database migration standards
Motivation
Reduce pain around metadata database migrations by ensuring standards are followed and appropriate reviews are obtained before merging.
Proposed Change
SIP-57 (Semantic Versioning) introduced standards for avoiding breaking changes and general best practices for database migrations. The proposed changes below are in addition to those standards:
- All migrations must support rollbacks. Migrations must have a functional
downgrade
method to effectively rollback schema changes introduced in theupgrade
method. If a migration makes changes to data that are not easily undone (e.g. fix: Retroactively add granularity param to charts #12960), the changes introduced must be non-breaking and idempotent. - Migrations should be atomic and configured to complete fully in a single run, using a single transaction where appropriate. Any failures should trigger a rollback to the previous state. Partial migrations should be avoided.
- Any constraints added within a migration should include an explicit name, e.g.
sa.ForeignKeyConstraint(["user_id"], ["ab_user.id"], name='fk_user_id')
. - PRs introducing database migrations must include runtime estimates and downtime expectations.
- Care should be taken to not introduce expensive DDL operations such as adding unnecessary constraints/indexes or setting column default values on tables potentially containing thousands of rows. [1][2]
- Indexes in Postgres tables should be added and removed CONCURRENTLY.
- Migrations for breaking changes and cleanup (e.g. removal of columns) that should be held for the next major version, per the guidelines in SIP-57, should be accumulated in
/superset/migrations/next/
for evaluation and inclusion in a future release. - Establish Github code owners on the
superset/migrations
directory to ensure PMC members are notified of new or updated migrations. - Require two approvals for PRs that include database migrations, including committers from multiple organizations.
- PRs including database migrations should be kept open for a minimum review period of two business days to allow for adequate review, unless circumstances such as a critical vulnerability or breakage require faster turnaround.
New or Changed Public Interfaces
None.
New dependencies
No additional package dependencies.
Migration Plan and Compatibility
Workflow changes only. PR template will be updated with guidelines. Process for running migrations unchanged.
Rejected Alternatives
The status quo, which has resulted in quite a bit of thrash, deployment roadblocks and external discussions between Superset users.
Metadata
Metadata
Assignees
Type
Projects
Status
Implemented / Done
Activity