Обновление = ☠

Несколько советов на случай, если кто-то ещё застрянет в подобной ситуации.

Во-первых, не запускайте ./launcher cleanup. Вместо этого выполните ./launcher start app, чтобы перезапустить ваш существующий контейнер. После этого вы сможете сделать что-то вроде:

./launcher enter app
su - postgres
psql discourse
drop table ...

Если у вас нет возможности войти в контейнер и напрямую взаимодействовать с PostgreSQL, вам придётся выполнить это во время сборки контейнера, добавив что-то вроде этого в ваш app.yml:

hooks:
  after_postgres:
      - exec: /bin/bash -c 'sudo -u postgres psql discourse <<< "drop table summary_sections;"'
      - exec: /bin/bash -c 'sudo -u postgres psql discourse <<< "drop table theme_settings_migrations;"'

Я не знаю, как именно эти две таблицы были созданы так, что миграции вышли из строя, но это решение помогло. И всё было ещё страннее: база данных каким-то образом была очищена, и после того, как я исправил проблему, она стала совершенно новой. Значит, процесс был остановлен где-то посередине миграции.