【问题标题】:How do I fix alembic's "Requested revision overlaps with other requested revisions"?如何修复 alembic 的“请求的修订与其他请求的修订重叠”?
【发布时间】:2017-07-14 10:34:00
【问题描述】:

我在一个使用 alembic 管理数据库迁移的团队中工作。我最近拉了master,并尝试运行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)

我可以通过谷歌搜索异常找到的唯一参考是source code,我不想通读它。

这种情况怎么会发生?我应该如何解决它? “重叠”是什么意思?

【问题讨论】:

    标签: alembic


    【解决方案1】:

    我通过删除数据库中的旧版本号来“修复”它;

    my_postgres=# DELETE FROM alembic_version WHERE version_num = '453d88f67d34';
    DELETE 1
    my_postgres=# SELECT * FROM alembic_version;
     version_num  
    --------------
     a04c53fd8c74
    (1 row)
    

    我现在可以运行升级和降级。我的历史和头脑看起来都一样。但我仍然不知道为什么会这样,或者是否有一些数据库状态被巧妙地弄乱了,所以如果有人有更好的答案,请发布!

    【讨论】:

    • 当我意外导入另一个数据库的一部分时,确实发生在我身上
    【解决方案2】:

    对于那些发现这个问题的人来说,这也发生在我身上,因为我尝试将我的数据库恢复到它的旧版本而没有先删除它。我相信您的alembic_version 表中应该只有一行,version_num 是您的数据库当前应该使用的任何版本。

    所以当我恢复我的数据库并且没有先删除它,而不是替换当前版本号时,它添加了一个新行。为了修复它,我必须从我的alembic 表中删除不正确的版本(无论数据库的版本号是什么,我都应该首先删除)。 ...只是为 Altair 的回答提供更多背景信息。

    【讨论】:

    【解决方案3】:
    1. alembic_version 表应该只有一行以保持一致性。
    2. 如果您从另一个版本恢复数据库数据,恢复操作将添加另一行。
    3. 恢复数据后,删除从 恢复操作。

    这个对我有用:

    delete from alembic_version where version_num='e69ad4aec63b';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 2020-11-10
      相关资源
      最近更新 更多