Schema Evolution Design
Introduction
A way to migrate database changes as a project evolves. This is not being added to replace South, nashvegas, etc but for those tools to be based upon.
Participants
Design: JoeTennies Development:
Status
Process started- Design drafted
- Design proposed
- Design approved
- Implementation drafted
- Implementation proposed <put ticket number here>
- Ticket approved
- Released
Objectives
Primary are required for first round of implementation. Secondary are things to be considered in the design but not required for first round of implementation.
Primary
- Warn user to backup database
- Make user accept warning before doing
- Store revision number of tables
- Store updates as python scripts
- Modify database schemas (Will require updates to database API)
- Add columns
- Default values - function to do this
- Remove columns
- Change table names
- Change column types
- Automatic int/float conversion
- Automatic string length conversion
- Change column/table attributes
- Unique
- Add columns
- Reverse migrations? (from version 6 to version 4)
Secondary
- Allow personal patches against a database schema?
- This would allow an individual to store customizations but still be able to do schema migrations
- Detect bad migrations
- Detect that data may be lost
Non-Goals
- Autodetection of changes
- This should be left for external tools like South or nashvegas to do
Code Design
Signals
pre_migration
Parameters:
- app - the app to be migrated as a string
- return_value - class that has a function to cancel the migration???
Sent just before starting running migrations for an app.
post migration
Parameters:
- app - the app to be migrated as a string
Sent just after migration successfully finishes for an app. Note that if the migrations fail in the middle of executing, this will not get called.
Storage
The storage will be a model with 2 fields:
- app - the app to be migrated
- modification - the modification installed
TODO YET IN DESIGN
Things that need to be looked at:
- Index managing
- Foreign keys