【问题标题】:Flask-Migrate hangs on table modificiationFlask-Migrate 挂起表修改
【发布时间】:2017-08-15 16:56:39
【问题描述】:

我在使用 Flask-Migrate 运行升级命令时遇到问题。最初我试图一次修改三个表并且它挂起,我将其缩小到一个特定的表(其他升级没有问题)。我没有看到数据库上有任何锁。我正在使用 Postgres,目前只是在开发环境中工作。 migrate 命令似乎工作正常并生成upgrade 方法没有任何问题(见代码)

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    op.drop_column('equipment', 'criteria_notes')
    # ### end Alembic commands ###

一旦我运行升级命令,我就会卡在这里:

>flask db upgrade
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade 76bf72d8e0e4 -> 1723c01f0606, empty message

带有闪烁的光标。当我退出命令窗口(我正在使用 windows)时,没有应用任何更改。

我试过了

  • 重启电脑
  • 使用 pgAdmin 寻找锁或其他会话
  • 修改其他表,可以添加和删除列

【问题讨论】:

  • 此列所在的表有多大?
  • @Miguel 目前很小。 11 列 4 行。
  • 如果您尝试通过 SQL 删除列会发生什么(即ALTER TABLE ...)?这也挂了吗?
  • @Miguel 这行得通。我昨天下午尝试了作为解决方法。我找到了所有使用 Flask db upgrade --sql 的 SQL 命令并更新了我的表和 alembic 表。
  • 我也遇到了这个问题。奇怪的是,它只发生在我的登台环境中。当我创建数据库转储并在本地开发环境中运行它时,它似乎可以工作。

标签: python postgresql flask-migrate


【解决方案1】:

您可能有其他进程连接到此数据库。

这发生在我身上,我将 celery、uwsgi 和一个单独的自定义进程都连接到生产服务器上的烧瓶数据库,我想知道为什么升级会挂起。

一旦我手动关闭这些进程,升级脚本就可以正常运行而不会挂起。

在我的情况下,我也尝试在意识到这一点之前重新启动,但这并没有帮助,因为这些其他进程被编程为在启动时启动。

【讨论】:

  • 可能我当时查看并没有找到任何锁。自从我发布了这个问题后,我通过执行原始 SQL 来解决它,并且我还在某个时候删除了整个数据库并在开发环境中重新创建它,并且从未有问题返回。
【解决方案2】:

我有同样的问题,这个问题发生在我身上是因为锁,使用验证它

select * from pg_locks; 

每个锁对应的PID有很多,我重新启动了postgresql服务然后运行升级命令它工作了

sudo systemctl restart postgresql
flask db upgrade

【讨论】:

    【解决方案3】:

    由于锁,我在 MySql 上遇到了同样的问题,这个命令对我有用。

    sudo service mysql restart
    

    【讨论】:

      【解决方案4】:

      在我的情况下,这是由于桌子上的锁。

      select * from pg_locks; 
      

      在 postgres 中向我展示了正在发生的事情。

      【讨论】:

        猜你喜欢
        • 2016-11-11
        • 2014-08-16
        • 2013-10-19
        • 2018-12-11
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        相关资源
        最近更新 更多