PG::UndefinedTable : ERROR : la relation « voice_rooms » n'existe pas

J’ai eu ce problème aussi — et exécuter ce script a nécessité un peu d’accompagnement de la part d’ask.discourse.com, car ce n’est pas très simple pour les administrateurs système moins expérimentés !

Voici un résumé pour les autres :


Pour ceux qui rencontrent ce problème avec l’installation Docker standard, voici comment exécuter réellement le script ci-dessus.

Ouvrez un shell et lancez psql.

  • Conteneur unique :

    cd /var/discourse
    ./launcher start app   ## Nécessaire uniquement si vous avez déjà eu un échec de reconstruction
    ./launcher enter app
    su -c 'psql discourse' postgres
    
    
  • Configuration à deux conteneurs :

    cd /var/discourse
    ./launcher enter data
    su -c 'psql discourse' postgres
    
    

Vous devriez voir un invite discourse=#. En cas de doute, exécutez \conninfo.

Exécutez le script.

Collez tout le bloc DO $$ ... $$; de la publication de nat ci-dessus dans l’invite et appuyez sur Entrée. Une exécution réussie affiche des avis tels que :

NOTICE:  Renamed resenha_rooms to voice_rooms
NOTICE:  Renamed resenha_room_memberships to voice_room_memberships
...

Si, au contraire, une exception est levée (par ex. « Both Resenha and Voice tables exist. Nothing was changed. »), arrêtez-vous et collez le message ici — le script est délibérément sûr et ne modifie rien dans ce cas.

Quitter et reconstruire.

\q
exit

puis, de retour sur l’hôte :

./launcher rebuild app          # conteneur unique
./launcher rebuild web_only     # deux conteneurs (peut aussi se faire via le bootstrap, bien sûr)

Vous pourriez avoir besoin de deux reconstructions — la première finalise l’état de migration partiellement appliqué, la seconde s’achève proprement.