Users are reporting a PG::UndefinedTable error regarding the missing translation_overrides relation during Discourse database migrations. jamesarobbo initially encountered this issue while attempting to run migrations on a production Heroku setup, noting that a similar problem was reportedly fixed previously. zogstrip suggested dropping and recreating the database, but jamesarobbo clarified that this is a production environment.
marcosbc identified the issue as a known problem affecting fresh startups in Kubernetes clusters and vanilla Discourse launcher setups. They provided logs showing the error occurring during rake db:migrate when the system attempts to query the translation_overrides table before it is fully established.
Eric_Keller provided a definitive root cause for automated restore pipelines: a version mismatch between the restored database backup and the current container code. The latest code references the translation_overrides model, but the older backup does not contain this table. The suggested solution is to rebuild the application first to create the necessary schema from scratch, and then perform the restore. This approach allows Discourse’s built-in restore process to properly handle the database structure, avoiding the migration conflict.
I have cloned master and in trying to run migrations i get this error:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation “translation_overrides” does not exist
I see that a topic was created for this last November and seemingly fixed so i’m wondering what coudl be the cause?
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "translation_overrides" does not exist
remote: LINE 5: WHERE a.attrelid = '"translation_overrides"':...
remote: ^
remote: : SELECT a.attname, format_type(a.atttypid, a.atttypmod),
remote: pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
remote: FROM pg_attribute a LEFT JOIN pg_attrdef d
remote: ON a.attrelid = d.adrelid AND a.attnum = d.adnum
remote: WHERE a.attrelid = '"translation_overrides"'::regclass
remote: AND a.attnum > 0 AND NOT a.attisdropped
remote: ORDER BY a.attnum
PG::UndefinedTable: ERROR: relation "translation_overrides" does not exist
remote: LINE 5: WHERE a.attrelid = '"translation_overrides"':...
production but getting it to run on heroku (i realise that heroku is not the ‘supported’, ‘recommended’ setup ). despite that, do you have any ideas? thanks a lot
$ ./launcher rebuild app
...
I, [2021-05-27T10:53:27.612150 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake plugin:pull_compatible_all'
I, [2021-05-27T10:53:30.072954 #1] INFO -- : docker_manager è già all'ultima versione compatibile
I, [2021-05-27T10:53:30.073194 #1] INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
2021-05-27 10:53:32.977 UTC [4354] discourse@discourse ERROR: la relazione "translation_overrides" non esiste al carattere 454
2021-05-27 10:53:32.977 UTC [4354] 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
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
Attenzione: non è definito alcun cast di tipo per il tipo "name" con oid 19. Si prega di castare esplicitamente questo tipo a TEXT per essere sicuri in caso di futuri cambiamenti.
> Inizializzazione dei temi e degli schemi di colore
I, [2021-05-27T10:53:49.976589 #1] INFO -- : == 20000225050318 AddSchemaMigrationDetails: in migrazione ========================
...
Questo problema si verifica anche con una semplice installazione ufficiale di discourse_docker, utilizzando un test di ripristino automatizzato tramite pipeline ogni mattina della settimana. Questo errore simile è apparso improvvisamente nella pipeline fallita.
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!
La causa principale è stata una discrepanza di versione tra il backup ripristinato e il codice del contenitore.
L’ultima versione del codice di Discourse include un modello che fa riferimento a translation_overrides, ma il database di produzione (proveniente dal backup) è su una versione più vecchia in cui questa tabella non esiste ancora o ha un nome diverso.
Ciò che ha funzionato per me è ricreare prima (il che crea lo schema da zero), poi ripristinare il backup. Il processo di ripristino utilizza la funzione di ripristino integrata di Discourse, che elimina e ricrea correttamente il database.