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

Oni*_*shi 6 postgresql ruby-on-rails heroku

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

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

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

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) ===========================
Run Code Online (Sandbox Code Playgroud)

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

SQL (1.6ms)  INSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"  [["version", "20180519024721"]]
(2.4ms)  COMMIT
ActiveRecord::InternalMetadata Load (1.7ms)  SELECT  "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2  [["key", "environment"], ["LIMIT", 1]]
(1.3ms)  BEGIN
SQL (1.6ms)  INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"  [["key", "environment"], ["value", "beta"], ["created_at", "2018-06-04 18:54:24.766405"], ["updated_at", "2018-06-04 18:54:24.766405"]]
(2.1ms)  COMMIT
(1.4ms)  SELECT pg_advisory_unlock(5988010931190918735)
Run Code Online (Sandbox Code Playgroud)

它在最后一个SELECT语句中挂起.是什么pg_advisory_unlock,为什么它运行?阅读这篇博文似乎应该从我的应用程序中调用它们,但我在我的应用程序中找不到任何类似的文本.请帮忙!

a3y*_*3y3 1

pg_advisory_unlock只是 Heroku 用来获取数据库事务级锁的 postgresql 锁。如果 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>