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

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"':...

thanks

Is that a dev setup? If so, then run “rake db:drop db:create db:migrate” again.

production but getting it to run on heroku (i realise that heroku is not the ‘supported’, ‘recommended’ setup :slight_smile: ). despite that, do you have any ideas? thanks a lot

Всем привет, похоже, это та же проблема, что и Migration error on fresh startup running in k8s cluster. Нам удалось воспроизвести её в стандартной установке загрузчика Discourse, используя официальный шаблон standalone.yml при развёртывании:

$ ./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 уже находится в последней совместимой версии

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:  отношение "translation_overrides" не существует на символе 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

Warning: no type cast defined for type "name" with oid 19. Please cast this type explicitly to TEXT to be safe for future changes.
> Seeding theme and color schemes
I, [2021-05-27T10:53:49.976589 #1]  INFO -- : == 20000225050318 AddSchemaMigrationDetails: migrating ========================
...

Это также происходит при простой официальной установке discourse_docker, когда каждое утро недели выполняется автоматизированное тестирование восстановления через конвейер. Подобная ошибка внезапно появилась в неудачном запуске конвейера.

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!

Первопричиной стало несоответствие версий между восстановленной резервной копией и кодом контейнера.

В последней версии кода Discourse есть модель, ссылающаяся на translation_overrides, но база данных продакшена (из резервной копии) находится на более старой версии, где эта таблица либо ещё не существует, либо имеет другое имя.

Мне помогло следующее: сначала выполнить пересборку (что создаёт схему с нуля), а затем восстановить резервную копию. Процесс восстановления использует встроенную функцию восстановления Discourse, которая корректно удаляет и заново создаёт базу данных.