我正在使用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似乎应该从我的应用程序中调用那些,但我在我的应用程序中找不到任何类似的文本。请帮忙!
答案 0 :(得分:1)
pg_advisory_unlock
只是一个postgresql锁,Heroku用它来获取数据库的事务级别锁。如果Heroku无法获得锁定,则迁移本身不成功是没有必要的。请检查您的架构是否包含已迁移的表格,如果是,您不需要再执行任何操作。编辑:您的日志表示已提交迁移,这强烈表明迁移确实成功。
否则,您可以尝试删除数据库并重新创建数据库,然后再次运行迁移。如果它已包含重要数据,请使用heroku pg:backups:capture --app <name-of-app>
备份数据库,然后运行rails db:drop
,rails db:create
,最后运行rails db:migrate
,以便再次运行迁移。您可以使用heroku pg:backups:restore <name-of-backup> --app <name-of-app>