Error upgrading database with Alembic
12 November 2016On my last project I started using Alembic as a migration tool for the database, which is a new thing for me.
Before that I used to simply keep a file with the modifications applied to the developement database between each release version and patch the test and production datbase accordingly. Some of the drawbacks to this method are a risk of manipulation error and it is very difficult to reverse the changes when they are applied.
Today while performing an upgrade on the production database running Postgresql with Alembic :
alembic upgrade head
I received the following error :
...
ERROR [alembic.util.messaging] Online migration expected to match one row
when updating '7b4f4b275d5b' to 'cca4e32787e4' in 'alembic_version'; 2 found
...
Each database that Alembic work with has an "alembic_version" table, with one column, which contains the id of the current version of the database.
In my database there was two rows in the table alembic_version both with the same value. As the table has no other column to differentiate the rows it is a little bit tricky to remove only one but this did the trick :
DELETE FROM alembic_version
WHERE ctid IN (select ctid from alembic_version LIMIT 1);
I do not know why there was two entries in the table but removing one fixed the problem.