PG::UndefinedTable: ERROR: relation "translation_overrides" does not exist

Dies tritt auch bei einer einfachen offiziellen discourse_docker-Installation auf, wenn täglich über eine Pipeline automatisierte Wiederherstellungstests durchgeführt werden. Dieser ähnliche Fehler tauchte plötzlich im fehlgeschlagenen Pipeline-Lauf auf.

I, [2026-05-20T07:59:01.413128 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle  
  exec rake db:migrate'                                                                                                                                                                       
  2026-05-20 07:59:09.214 UTC [1576] discourse@discourse ERROR:  relation "translation_overrides" does not exist at character 523                                                             
  2026-05-20 07:59:09.214 UTC [1576] discourse@discourse STATEMENT:  SELECT a.attname, format_type(a.atttypid, a.atttypmod),                                                                  
             pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,                                                                                                          
             c.collname, col_description(a.attrelid, a.attnum) AS comment,                                                                                                                    
             attidentity AS identity,                                                                                                                                                         
             attgenerated as attgenerated                                                                                                                                                     
        FROM pg_attribute a                                                                                                                                                                   
        LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum                                                                                                               
        LEFT JOIN pg_type t ON a.atttypid = t.oid                                                                                                                                             
        LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation                                                                                               
       WHERE a.attrelid = '"translation_overrides"'::regclass                                                                                                                                 
         AND a.attnum > 0 AND NOT a.attisdropped                                                                                                                                              
       ORDER BY a.attnum                                                                                                                                                                      
                                                                                                                                                                                              
  2026-05-20 07:59:13.167 UTC [1627] discourse@discourse ERROR:  schema "discourse_functions" already exists                                                                                  
  2026-05-20 07:59:13.167 UTC [1627] discourse@discourse STATEMENT:  CREATE SCHEMA discourse_functions;                                                                                       
  psql:/var/www/discourse/db/structure.sql:16: ERROR:  schema "discourse_functions" already exists                                                                                            
  rake aborted!

Die Ursache war eine Versionsinkonsistenz zwischen dem wiederhergestellten Backup und dem Container-Code.

Der neueste Discourse-Code enthält ein Modell, das auf „translation_overrides“ verweist, aber die Produktionsdatenbank (aus dem Backup) befindet sich auf einer älteren Version, bei der diese Tabelle entweder noch nicht existiert oder einen anderen Namen hat.

Was bei mir funktioniert hat, war zunächst ein Rebuild (wodurch das Schema von Grund auf neu erstellt wird) und anschließend die Wiederherstellung des Backups. Der Wiederherstellungsprozess nutzt die integrierte Wiederherstellungsfunktion von Discourse, die die Datenbank ordnungsgemäß löscht und neu erstellt.