44 lines
1.9 KiB
ReStructuredText
44 lines
1.9 KiB
ReStructuredText
Nailgun database migrations
|
|
===========================
|
|
|
|
Nailgun uses Alembic (http://alembic.readthedocs.org/en/latest/) for database
|
|
migrations, allowing access to all common Alembic commands through "python
|
|
manage.py migrate"
|
|
|
|
This command creates DB tables for Nailgun service::
|
|
|
|
python manage.py syncdb
|
|
|
|
This is done by applying one by one a number of database migration files,
|
|
which are located in nailgun/nailgun/db/migration/alembic_migrations/versions.
|
|
This command does not create corresponding DB tables unless you created another
|
|
migration file or updated an existing one, even if you're making some changes
|
|
in SQLAlchemy models or creating the new ones.
|
|
A new migration file can be generated by running::
|
|
|
|
python manage.py migrate revision -m "Revision message" --autogenerate
|
|
|
|
There are two important points here:
|
|
|
|
1) This command always creates a "diff" between the current database state
|
|
and the one described by your SQLAlchemy models, so you should always
|
|
run "python manage.py syncdb" before this command. This prevents running
|
|
the migrate command with an empty database, which would cause it to
|
|
create all tables from scratch.
|
|
2) Some modifications may not be detected by "--autogenerate", which
|
|
require manual addition to the migration file. For example, adding a new
|
|
value to ENUM field is not detected.
|
|
|
|
After creating a migration file, you can upgrade the database to a new state
|
|
by using this command::
|
|
|
|
python manage.py migrate upgrade +1
|
|
|
|
To merge your migration with an existing migration file, you can just move
|
|
lines of code from the "upgrade()" and "downgrade()" methods to the bottom of corresponding methods in previous migration file. As of this writing,
|
|
the migration file is called "current.py".
|
|
|
|
For all additional features and needs, you may refer to Alembic documentation:
|
|
http://alembic.readthedocs.org/en/latest/tutorial.html
|
|
|