Heroku зависает во время миграции со странным pg_advisory_unlock - PullRequest
0 голосов
/ 04 июня 2018

Я использую Rails 5.1, размещенный на Heroku, и использую следующую команду для переноса моей базы данных:

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) ===========================

Это последний созданный мной файл миграции, так что, похоже, все работает.Затем он запускается:

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)

И он висит там при последнем операторе SELECT.Что такое pg_advisory_unlock и почему он работает?Чтение этого сообщения в блоге кажется, что они должны быть вызваны из моего приложения где-то, но я не могу найти подобный текст в моем приложении.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 13 июня 2018

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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...