Migrations#

When the data classes in Quetz are modified (for example, a column is added, remove or updated), the database need to be upgraded while keeping the stored data. This cane be done automatically, using migrations. Quetz uses alembic to handle migrations.

Note

Before running any of the commands below, you need to make sure that your database is backed up. The backup process depends on the infrastrcuture, but in the simplest case it may involve the dump of the whole database (using pg_dump for example).

Migrating database#

When you install a new version of Quetz or Quetz plugin, you should apply the provided migrations using the quetz init-db command. For example, assuming that your deployment is in deployment_dir folder:

quetz init-db deployment_dir

Adding new migrations#

Once you modified your data models in Quetz, you can autogenerate the appropriate migrations using make-migrations command:

quetz init-db deployment_dir # to make sure that the db is up-to-date
quetz make-migrations deployment_dir --message "my revision message"

This should create a new file in quetz/migrations/versions directory, which you can then add to the git repository. Then you can apply the migrations the standard way:

quetz init-db deployment_dir # to make sure that the db is up-to-date

Note

For running unit test there is no need to create the migrations, the testing framework will create all tables automatically for you. However, if you want to run the tests with the migrations, you can configure it with env variable: QUETZ_TEST_DBINIT=use-migrations pytest quetz

Initializing migrations for plugins#

To use migrations in plugins, you need to initialize them. Our cookiecutter template will create the necessary backbone for you, you will just need to define your models in the db_models.py file of plugin directory, and then run the command:

quetz make-migrations deployment_dir --message "initial revision" --initialize --plugin quetz-plugin_name

This should create a new migration script in PLUGIN_DIR/migrations/versions.

Note

If you want to add the migration script to you working directory, you need to install the plugin using the development mode: pip install -e PATH_TO_PLUGIN

As always the quetz init-db will upgrade automatically your database to reflect the data models defined in the plugin.

Adding migrations for plugins#

When you change the data model in the plugin, you can create the required migrations using the same quetz make-migrations command, but without --initialize:

quetz make-migrations deployment_dir --message "second revision"  --plugin quetz-plugin_name