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.