我在使用alembic管理数据库迁移的团队中工作。我最近拉了主人,并试图运行alembic upgrade heads
。我收到以下消息;
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
ERROR [alembic.util.messaging] Requested revision a04c53fd8c74 overlaps with other requested revisions 453d88f67d34
FAILED: Requested revision a04c53fd8c74 overlaps with other requested revisions 453d88f67d34
我尝试运行alembic downgrade -1
时收到了相同的消息。正在运行alembic history
打印此内容;
453d88f67d34 -> a04c53fd8c74 (label_1, label_2) (head), Create such and such tables.
2f15c778e709, 9NZSZX -> 453d88f67d34 (label_1, label_2) (mergepoint), empty message
b1861bb8b23f, b8aa3acdf260 -> 2f15c778e709 (label_1, label_2) (mergepoint), Merge heads b18 and b8a
(...many more old revisions)
对我来说,这看起来像是一段完美的历史。 alembic heads
报告a04c53fd8c74 (label_1, label_2) (head)
。
对我来说唯一看起来很奇怪的是我的alembic版本db中有两个值;
my_postgres=# SELECT * FROM alembic_version;
version_num
--------------
a04c53fd8c74
453d88f67d34
(2 rows)
我可以通过Google搜索异常找到的唯一参考是source code,我宁愿不通读。
这种情况怎么会发生?我该如何解决? “重叠”是什么意思?
答案 0 :(得分:13)
我通过删除数据库中的旧版本号来“修复”它;
my_postgres=# DELETE FROM alembic_version WHERE version_num = '453d88f67d34';
DELETE 1
my_postgres=# SELECT * FROM alembic_version;
version_num
--------------
a04c53fd8c74
(1 row)
我现在可以运行升级和降级。我的历史和头脑看起来都一样。但我仍然不知道为什么会发生这种情况,或者是否有一些微妙的混乱状态,所以如果有人有更好的答案,请发布它!
答案 1 :(得分:2)
对于那些发现这一点的人来说,这也发生在我身上,因为我尝试将数据库恢复到旧版本而不先删除它。我相信你的alembic_version
表中应该只有一行,其中version_num
表示你的数据库当前所处的版本。
因此,当我恢复数据库并且没有先删除它时,它不是替换当前版本号,而是添加了一个新行。为了解决这个问题,我不得不从我的alembic表中删除不正确的版本(无论数据库的版本号是什么,我应该首先删除)。 ......只是为Altair的答案提供更多背景信息。
答案 2 :(得分:0)
这对我有用:
justify-content