postgresql alembic util命令错误找不到标识符

2vuwiymt  于 2023-04-20  发布在  PostgreSQL
关注(0)|答案(4)|浏览(174)

我尝试使用alembic处理项目的本地迁移。第一次成功了,但后来我需要删除文件夹并重新启动。(不要问为什么,我只是不得不)我遵循this tutorial并运行命令

python manage.py db init

这没什么,但当我想跑的时候

python manage.py db migrate

我得到这个错误:

alembic.util.CommandError: Can't locate revision identified by '31b8ab83c7d'

现在,看起来alembic正在寻找一个已经不存在的版本号。有什么方法可以让alembic忘记这个文件吗?或者像从None重新开始比较到-〉auto-generated再次?

xn1cxnb4

xn1cxnb41#

Alembic将版本历史存储在您的数据库中。因此,它使用存储在数据库中的值来搜索修订。我的个人数据库的版本号存储在表alembic_version中:

mysql> SELECT * FROM alembic_version;
+-------------+
| version_num |
+-------------+
| c8ad125e063 |
+-------------+
1 row in set (0.00 sec)

提示:如果是基于SQL的数据库,请使用命令SHOW TABLES查看表。
要解决您的问题,只需使用以下命令:

DROP TABLE alembic_version;

或者不管数据库版本表的名称是什么。然后您需要使用以下命令重新初始化迁移文件夹:

python manage.py db init

然后创建一个新的迁移:

python manage.py db migrate

然后你应该很好地去与工作迁移在alembic。

mpgws1up

mpgws1up2#

SirKaiserKai的解决方案对我不起作用,可能是因为我上次迁移时犯了一些愚蠢的错误,删除了一个我应该保留的文件。
我没有删除alembic_revision表,而是更新了version_num中的值,以匹配我知道的数据库所在的位置。

请确保使用与数据库当前状态匹配的文件迁移ID

1.检查缺少的迁移号

psql=> SELECT * FROM alembic_version;
+-------------------------+
|      version_num        |
+-------------------------+
| <the missing migration> |
+-------------------------+
(1 row)

1.更新数值

psql=> UPDATE alembic_version
psql->    SET version_num = '<true state of DB>'
psql->    WHERE version_num = '<the missing migration>';
UPDATE 1

如果您的数据库处于迁移文件<true state of DB>以外的状态,那么您将继续遇到错误。但是,如果<true state of DB>是从您之前停止的位置继续的迁移文件,则可以运行alembic upgrade head,并且也会运行此状态后的所有迁移。

mf98qq94

mf98qq943#

如果您遇到上述相同的问题,请运行以下命令:

Drop your local Alembic table

 - drop table alembic_version;

然后运行以下alembic命令:

- alembic stamp head
 - alembic revision --autogenerate -m "New revision"
 - alembic upgrade head
 - alembic stamp head

印章头允许alembic拥有最新的表结构。在运行新修订之前。

57hvy0tb

57hvy0tb4#

INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
ERROR [alembic.util.messaging] Can't locate revision identified by 'c140cfa017b4'
  FAILED: Can't locate revision identified by 'c140cfa017b4'

答:

**注意:**我在Ubuntu PostgreSQL中解决了这个问题

1.在Ubuntu中打开PostgreSQL,它会询问密码

sudo -u postgres psql

1.去你的数据库

\c <databasename>

1.显示数据库中的所有表

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

1.如果找到修订号(例如,c140cfa017b4),则显示表中的所有数据

select * from table name;

1.放下table

DROP TABLE <table name>;

如果问题解决了,你可以继续工作

相关问题