Estamos ejecutando nuestra pila en Heroku. Estamos usando Django 2.2 con Postgres 11 DB. Nuestra canalización de compilación (Github Actions) empuja a Heroku ( git push https://git.heroku.com... ) e inmediatamente después ejecuta las migraciones ( heroku run python manage.py migrate --app heroku-app-name ). Todo eso funcionaba con una base de datos de Postgres 9.6 y todavía funciona en nuestro entorno de prueba (Postgres 11). Ahora que la producción está en Postgres 11, el comando de migración de django simplemente está atascado y no produce ningún resultado, incluso así no hay migraciones reales para aplicar.
Las únicas diferencias entre nuestra configuración de producción y nuestra configuración de preparación son un seguidor/esclavo en producción adjunto a la base de datos maestra y la "carga de trabajo de producción".
Para arreglar esa implementación, tengo que ejecutar un
heroku pg:killall -a heroku-app-name heroku restart -a heroku-app-nameEn este punto, la tarea de migraciones en la canalización de compilación falla.
y luego las migraciones se pueden aplicar manualmente sin problemas:
heroku run python manage.py migrate --app heroku-app-nameEntonces, por alguna razón, el comando de migraciones está "esperando" algo, algún bloqueo de la base de datos o lo que sea, pero no puedo identificarlo. Especialmente extraño para mí es el hecho de que también está atascado donde no se aplican migraciones. ¿Por qué estaría atrapado allí?
Encontramos la solución. En realidad, hay tres cosas que se unen.
pg_dump ), el trabajo de copia de seguridad en Postgres 11 (¿y otros?) ahora tiene un Bloqueo más exclusivo en algunas operaciones. Supongo que CREAR EXTENSIÓN ... SI NO EXISTE (incluso si la extensión ya existe) no se puede ejecutar mientras se ejecuta un trabajo de copia de seguridad en paralelo.(Estoy seguro de que faltan algunas internas de Postgres para explicar esto más correctamente)
Como resultado de estas tres cosas, la base de datos bloquea la operación de migración y espera a que finalice el trabajo de copia de seguridad. He movido el trabajo de copia de seguridad diario a una hora diferente y he reconfigurado nuestra canalización para esperar a que la copia de seguridad "previa a la implementación" finalice primero.