Heroku在使用奇怪的pg_advisory_unlock迁移期间挂起

时间:2018-06-04 19:04:30

标签: ruby-on-rails postgresql heroku

我正在使用Heroku上托管的Rails 5.1,并使用以下命令迁移我的数据库:

myArray

所有迁移本身都正确完成:

try:
    cur.execute(query1)
    cur.execute(query2)
    cur.execute(query150)
    con.commit()
except Exception as e:
    con.rollback()

这是我创建的最后一个迁移文件,所以这一切似乎都有效。然后,这运行:

heroku run rake db:migrate -a [my app name]

它在最后一个SELECT语句中挂起。什么是SQL (1.6ms) INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version" [["version", "20180504164326"]] (2.1ms) COMMIT Migrating to AddPinToStaff (20180519024721) (1.5ms) BEGIN == 20180519024721 AddPinToStaff: migrating ==================================== -- add_column(:staff, :pin_number, :string) (4.2ms) ALTER TABLE "staff" ADD "pin_number" character varying -> 0.0045s == 20180519024721 AddPinToStaff: migrated (0.0046s) =========================== ,为什么它在运行?阅读this blog post似乎应该从我的应用程序中调用那些,但我在我的应用程序中找不到任何类似的文本。请帮忙!

1 个答案:

答案 0 :(得分:1)

pg_advisory_unlock只是一个postgresql锁,Heroku用它来获取数据库的事务级别锁。如果Heroku无法获得锁定,则迁移本身不成功是没有必要的。请检查您的架构是否包含已迁移的表格,如果是,您不需要再执行任何操作。编辑:您的日志表示已提交迁移,这强烈表明迁移确实成功。

否则,您可以尝试删除数据库并重新创建数据库,然后再次运行迁移。如果它已包含重要数据,请使用heroku pg:backups:capture --app <name-of-app>备份数据库,然后运行rails db:droprails db:create,最后运行rails db:migrate,以便再次运行迁移。您可以使用heroku pg:backups:restore <name-of-backup> --app <name-of-app>

还原数据库