Problema di ripristino: la relazione "theme_fields" non esiste

@tgxworld, I think this is in your wheelhouse.
Trying to restore a backup from Discourse 2.1.0.beta5 - https://github.com/discourse/discourse version 8da2d8df3d5f7196f1c267b8a664597a725241ac or "Discourse 2.1.0.beta5 - https://github.com/discourse/discourse version bed34b52b51ab903bcb7854cc1efb2bf4107ddfb" to f4ae53d52b70a6577a60388f3550f168a4706b5f

I get

# discourse restore mineral-rights-forum-2018-08-23-033241-v20180812150839.tar.gz
bundler: failed to load command: script/discourse (script/discourse)
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "theme_fields" does not exist
LINE 8:                WHERE a.attrelid = '"theme_fields"'::regclass
                                          ^
:               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 = '"theme_fields"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum

I tried restoring a backup from Beta 4 and it fails the same way, so I think it’s a problem with the current Discourse restoring, not the way that backups are created.

EDIT: It looks like the first time that I restore it works, but if I restore again, it fails. I’ve not yet tested this on more than one database.

Going to have to ship this into the support category, there could be some sort of bug here, but we need a proper repro that works consistently.

Can you consistently make this fail?

Anche io ho questo problema ora.

Cosa ho fatto:

Ho eseguito un backup con Discourse 2.5.0.beta4.

Come root

git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
cp /var/production-backup/var/discourse/containers/app.yml /var/discourse/containers/
mkdir -p /var/discourse/shared/standalone/backups/default/
cp /var/production-backup/var/discourse/shared/standalone/backups/default/whonix-forum-2020-05-21-132423-v20200506044956.tar.gz /var/discourse/shared/standalone/backups/default/
./launcher enter app
discourse enable_restore
discourse restore whonix-forum-2020-05-21-132423-v20200506044956.tar.gz

Risultato:

root@host-app:/var/www/discourse# discourse restore whonix-forum-2020-05-21-132423-v20200506044956.tar.gz
bundler: failed to load command: script/discourse (script/discourse)
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  relation "theme_fields" does not exist
LINE 8:  WHERE a.attrelid = '"theme_fields"'::regclass
                            ^

  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.1/lib/patches/db/pg.rb:110:in `exec'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-2.0.1/lib/patches/db/pg.rb:110:in `async_exec'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `block (2 levels) in query'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:64:in `block in query'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:722:in `block (2 levels) in log'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:26:in `block (2 levels) in synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `handle_interrupt'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:25:in `block in synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `handle_interrupt'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/concurrency/load_interlock_aware_monitor.rb:21:in `synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:721:in `block in log'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-6.0.3/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:712:in `log'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `query'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/postgresql_adapter.rb:820:in `column_definitions'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/abstract/schema_statements.rb:114:in `columns'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/schema_cache.rb:76:in `columns'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/connection_adapters/schema_cache.rb:82:in `columns_hash'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/model_schema.rb:488:in `load_schema!'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/attributes.rb:247:in `load_schema!'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/attribute_decorators.rb:50:in `load_schema!'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/model_schema.rb:478:in `block in load_schema'
  /usr/local/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/model_schema.rb:475:in `load_schema'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/model_schema.rb:352:in `columns_hash'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/dynamic_matchers.rb:60:in `block in valid?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/dynamic_matchers.rb:60:in `all?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/dynamic_matchers.rb:60:in `valid?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/dynamic_matchers.rb:11:in `respond_to_missing?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/scoping/named.rb:209:in `respond_to?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/scoping/named.rb:209:in `valid_scope_name?'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-6.0.3/lib/active_record/scoping/named.rb:187:in `scope'
  /var/www/discourse/app/models/theme_field.rb:8:in `<class:ThemeField>'
  /var/www/discourse/app/models/theme_field.rb:3:in `<top (required)>'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:16:in `require'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:16:in `require'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:381:in `const_get'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:381:in `block (2 levels) in eager_load'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:723:in `block in ls'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:720:in `foreach'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:720:in `ls'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:376:in `block in eager_load'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:368:in `synchronize'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:368:in `eager_load'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:483:in `each'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:483:in `eager_load_all'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application/finisher.rb:122:in `block in <module:Finisher>'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:32:in `instance_exec'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:32:in `run'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:61:in `block in run_initializers'
  /usr/local/lib/ruby/2.6.0/tsort.rb:228:in `block in tsort_each'
  /usr/local/lib/ruby/2.6.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
  /usr/local/lib/ruby/2.6.0/tsort.rb:431:in `each_strongly_connected_component_from'
  /usr/local/lib/ruby/2.6.0/tsort.rb:349:in `block in each_strongly_connected_component'
  /usr/local/lib/ruby/2.6.0/tsort.rb:347:in `each'
  /usr/local/lib/ruby/2.6.0/tsort.rb:347:in `call'
  /usr/local/lib/ruby/2.6.0/tsort.rb:347:in `each_strongly_connected_component'
  /usr/local/lib/ruby/2.6.0/tsort.rb:226:in `tsort_each'
  /usr/local/lib/ruby/2.6.0/tsort.rb:205:in `tsort_each'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/initializable.rb:60:in `run_initializers'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/application.rb:363:in `initialize!'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/railtie.rb:190:in `public_send'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-6.0.3/lib/rails/railtie.rb:190:in `method_missing'
  /var/www/discourse/config/environment.rb:7:in `<top (required)>'
  script/discourse:264:in `require'
  script/discourse:264:in `load_rails'
  script/discourse:119:in `restore'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
  /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
  script/discourse:284:in `<top (required)>'
root@host-app:/var/www/discourse#

È successo due volte. Non so come procedere da qui.

Puoi ripristinarlo tramite l’interfaccia utente?

No.

> [2020-05-22 12:11:36] 'Patrick' ha avviato il ripristino!
> [2020-05-22 12:11:36] Impostazione dello stato del ripristino su in corso...
> [2020-05-22 12:11:36] Verifica dell'esistenza di /var/www/discourse/tmp/restores/default/2020-05-22-121136...
> [2020-05-22 12:11:36] Copia dell'archivio nella directory tmp...
> [2020-05-22 12:11:40] Decompressione dell'archivio, ciò potrebbe richiedere del tempo...
> [2020-05-22 12:11:47] Estrazione del file dump...
> [2020-05-22 12:11:58] Convalida dei metadati...
> [2020-05-22 12:11:58]   Versione corrente: 20200522004855
> [2020-05-22 12:11:58]   Versione ripristinata: 20200506044956
> [2020-05-22 12:11:58] Attivazione della modalità sola lettura...
> [2020-05-22 12:11:58] Pausa di Sidekiq...
> [2020-05-22 12:11:58] Attesa fino a 60 secondi affinché Sidekiq completi l'esecuzione dei job...
> [2020-05-22 12:12:06] Creazione delle funzioni mancanti nello schema discourse_functions...

Anche dopo ore, non succede nulla.

Aggiorna la pagina.

Oops

Il software che alimenta questo forum di discussione ha riscontrato un problema imprevisto. Ci scusiamo per il disagio.

Sono state registrate informazioni dettagliate sull’errore ed è stata generata una notifica automatica. Ne esamineremo il caso.

Non è necessaria alcuna ulteriore azione. Tuttavia, se l’errore persiste, puoi fornire ulteriori dettagli, inclusi i passaggi per riprodurre l’errore, pubblicando un argomento nella categoria di feedback del sito.

root@whonix:/var/discourse# ./launcher logs app
> run-parts: esecuzione di /etc/runit/1.d/00-ensure-links
> run-parts: esecuzione di /etc/runit/1.d/00-fix-var-logs
> run-parts: esecuzione di /etc/runit/1.d/anacron
> run-parts: esecuzione di /etc/runit/1.d/cleanup-pids
> Pulizia dei file PID obsoleti
> run-parts: esecuzione di /etc/runit/1.d/copy-env
> runsvdir avviato, PID 38
> ok: run: redis: (pid 52) 0s
> ok: run: postgres: (pid 51) 0s
> chgrp: gruppo non valido: 'syslog'
> rsyslogd: imklog: impossibile aprire il log del kernel (/proc/kmsg): Operazione non consentita.
> rsyslogd: attivazione del modulo imklog fallita [v8.1901.0 consulta https://www.rsyslog.com/e/2145 ]
> pid supervisor: 47 pid unicorn: 77
> root@whonix:/var/discourse# 
`root@whonix:/var/discourse# ./launcher enter app`

Possibile.

root@whonix-app:/var/www/discourse#

tail shared/standalone/log/rails/production.log
Errore imprevisto in Message Bus: PG::UndefinedTable: ERRORE: la relazione "user_auth_tokens" non esiste
LINE 1: SELECT "user_auth_tokens".* FROM "user_auth_tokens" WHERE ((...
                                         ^

Eccezione del job: PG::UndefinedTable: ERRORE: la relazione "application_requests" non esiste
LINE 1: SELECT "application_requests"."id" FROM "application_request...

C’è qualcosa che non va nel tuo backup.

Puoi estrarlo in locale e caricarlo in un database PostgreSQL? L’archivio gzip contiene 2 file: 1 backup di PostgreSQL e 1 directory uploads.

Grazie per l’aiuto!

Ho creato un nuovo backup dal vecchio server di produzione ancora pienamente funzionante.

Ho eliminato sia Docker che Discourse dal nuovo server di staging. Ho reinstallato entrambi seguendo le istruzioni ufficiali. Poi ho proceduto con le istruzioni per il ripristino da riga di comando.

Il backup è stato creato con docker-engine 17.05.0~ce-0~debian-stretch e deve essere ripristinato con docker-ce-cli 5:19.03.9~3-0~debian-buster. Questo comporta anche una versione più recente di PostgreSQL (vecchia: 10; nuova: 12).

È un approccio legittimo eseguire il backup di una versione obsoleta di Docker/PostgreSQL e tentare il ripristino su un’installazione aggiornata di Docker/Discourse?

Questa volta ho ottenuto un errore diverso.

ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(/wiki/Tor_Browser, 3) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(/wiki/Tor_Browser, 3) is duplicated.

Log completo:

root@whonix-app:/var/www/discourse# discourse restore whonix-forum-2020-05-25-065253-v20200506044956.tar.gz
Starting restore: whonix-forum-2020-05-25-065253-v20200506044956.tar.gz
[STARTED]
'system' ha avviato il ripristino!
Segnalo il ripristino come in corso...
Verifica che esista /var/www/discourse/tmp/restores/default/2020-05-25-132224...
Copia dell'archivio nella directory tmp...
Decompressione dell'archivio, potrebbe richiedere del tempo...
Estrazione del file dump...
Validazione dei metadati...
  Versione corrente: 20200524181959
  Versione da ripristinare: 20200506044956
Attivazione della modalità sola lettura...
Sospensione di Sidekiq...
Attesa di fino a 60 secondi affinché Sidekiq completi l'esecuzione dei lavori...
Creazione delle funzioni mancanti nello schema discourse_functions...
Ripristino del file dump... (potrebbe richiedere del tempo)
[taglio]
ALTER TABLE
[taglio di molte righe duplicate ALTER TABLE]
ALTER TABLE
CREATE INDEX
[taglio di molte righe duplicate CREATE INDEX]
CREATE INDEX
ERROR:  could not create unique index "index_incoming_referers_on_path_and_incoming_domain_id"
DETAIL:  Key (path, incoming_domain_id)=(/wiki/Tor_Browser, 3) is duplicated.
EXCEPTION: psql failed: DETAIL:  Key (path, incoming_domain_id)=(/wiki/Tor_Browser, 3) is duplicated.
/var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
Tentativo di rollback...
Esecuzione del rollback...
Pulizia dei dati...
Rimozione delle funzioni dallo schema discourse_functions...
Rimozione della directory tmp '/var/www/discourse/tmp/restores/default/2020-05-25-132224'...
Riattivazione di Sidekiq...
Disattivazione della modalità sola lettura...
Segnalo il ripristino come completato...
Notifica al 'system' della fine del ripristino...
Completato!
[FAILED]
Ripristino terminato.
root@whonix-app:/var/www/discourse#

Mi chiedo come sia possibile, dato che il mio vecchio server di produzione Discourse è ancora pienamente funzionante. Inoltre, questo è il secondo backup che provo.

Postgres 10 o Postgres 12?


MODIFICA:

root@whonix-app:/var/www/discourse# rails c
[1] pry(main)> IncomingReferer.where(path: "/wiki/Tor_Browser")
=> [#<IncomingReferer:0x0000561cba422f48
  id: 11361,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 3>]
[2] pry(main)> 

MODIFICA 2:

[6] pry(main)> IncomingReferer.where("path LIKE '%/wiki/Tor_Browser%'")
=> [#<IncomingReferer:0x0000561cc08882a8
  id: 19,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b3f48
  id: 67,
  path: "/wiki/Tor_Browser/Download_Confirmation_Screen",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b3e08
  id: 331,
  path: "/wiki/Tor_Browser/Internal_Updater",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b3cf0
  id: 489,
  path: "/wiki/Tor_Browser",

<page break> --- Premi invio per continuare ( q<enter> per interrompere ) --- <page break>

  incoming_domain_id: 113>,
 #<IncomingReferer:0x0000561cc08b3bb0
  id: 2957,
  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 617>,
 #<IncomingReferer:0x0000561cc08b3a70
  id: 4052,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 617>,
 #<IncomingReferer:0x0000561cc08b38e0
  id: 4196,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 1513>,
 #<IncomingReferer:0x0000561cc08b37f0
  id: 4220,

<page break> --- Premi invio per continuare ( q<enter> per interrompere ) --- <page break>

  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 1513>,
 #<IncomingReferer:0x0000561cc08b3700
  id: 4307,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 1552>,
 #<IncomingReferer:0x0000561cc08b34a8
  id: 4346,
  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 1552>,
 #<IncomingReferer:0x0000561cc08b3318
  id: 8713,
  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b3188

<page break> --- Premi invio per continuare ( q<enter> per interrompere ) --- <page break>

  id: 9746,
  path: "/wiki/Tor_Browser_without_Tor",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b2f08
  id: 10248,
  path: "/wiki/Tor_Browser_without_Tor",
  incoming_domain_id: 113>,
 #<IncomingReferer:0x0000561cc08b2cb0
  id: 11361,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 3>,
 #<IncomingReferer:0x0000561cc08b2bc0
  id: 11754,
  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 113>,

<page break> --- Premi invio per continuare ( q<enter> per interrompere ) --- <page break>

 #<IncomingReferer:0x0000561cc08b2ad0
  id: 12094,
  path: "/wiki/Tor_Browser/Advanced_Users",
  incoming_domain_id: 4560>,
 #<IncomingReferer:0x0000561cc08b28f0
  id: 12892,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 4559>,
 #<IncomingReferer:0x0000561cc08b25f8
  id: 13038,
  path: "/wiki/Tor_Browser",
  incoming_domain_id: 4560>]
[7] pry(main)> 
[8] pry(main)>

Sì, questa procedura è supportata.

Corrupt indexes in PG12, how do I fix?

Sto riscontrando lo stesso errore dell’OP relativo a “theme_fields”, anche su una nuova installazione di Discourse.

E, [2020-06-04T16:32:44.492756 #2024] ERROR -- : PG::UndefinedTable: ERROR:  relation "theme_fields" does not exist
LINE 8:  WHERE a.attrelid = '"theme_fields"'::regclass
                            ^
 (ActiveRecord::StatementInvalid)
/app/.global/gems/rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:110:in `exec'
/app/.global/gems/rack-mini-profiler-2.0.2/lib/patches/db/pg.rb:110:in `async_exec'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:65:in `block (2 levels) in query'
/app/.global/gems/activesupport-6.0.1/lib/active_support/dependencies/interlock.rb:48:in `block in permit_concurrent_loads'
/app/.global/gems/activesupport-6.0.1/lib/active_support/concurrency/share_lock.rb:187:in `yield_shares'
/app/.global/gems/activesupport-6.0.1/lib/active_support/dependencies/interlock.rb:47:in `permit_concurrent_loads'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:64:in `block in query'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:718:in `block (2 levels) in log'
/opt/ruby/2.6/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:717:in `block in log'
/app/.global/gems/activesupport-6.0.1/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract_adapter.rb:708:in `log'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:63:in `query'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/postgresql_adapter.rb:817:in `column_definitions'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/abstract/schema_statements.rb:114:in `columns'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/schema_cache.rb:76:in `columns'
/app/.global/gems/activerecord-6.0.1/lib/active_record/connection_adapters/schema_cache.rb:82:in `columns_hash'
/app/.global/gems/activerecord-6.0.1/lib/active_record/model_schema.rb:490:in `load_schema!'
/app/.global/gems/activerecord-6.0.1/lib/active_record/attributes.rb:247:in `load_schema!'
/app/.global/gems/activerecord-6.0.1/lib/active_record/attribute_decorators.rb:51:in `load_schema!'
/app/.global/gems/activerecord-6.0.1/lib/active_record/model_schema.rb:480:in `block in load_schema'
/opt/ruby/2.6/lib/ruby/2.6.0/monitor.rb:235:in `mon_synchronize'
/app/.global/gems/activerecord-6.0.1/lib/active_record/model_schema.rb:477:in `load_schema'
/app/.global/gems/activerecord-6.0.1/lib/active_record/model_schema.rb:352:in `columns_hash'
/app/.global/gems/activerecord-6.0.1/lib/active_record/dynamic_matchers.rb:60:in `block in valid?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/dynamic_matchers.rb:60:in `all?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/dynamic_matchers.rb:60:in `valid?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/dynamic_matchers.rb:11:in `respond_to_missing?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/scoping/named.rb:209:in `respond_to?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/scoping/named.rb:209:in `valid_scope_name?'
/app/.global/gems/activerecord-6.0.1/lib/active_record/scoping/named.rb:186:in `scope'
/app/app/models/theme_field.rb:8:in `<class:ThemeField>'
/app/app/models/theme_field.rb:3:in `<top (required)>'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:16:in `require'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/kernel.rb:16:in `require'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:381:in `const_get'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:381:in `block (2 levels) in eager_load'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:723:in `block in ls'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:720:in `foreach'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:720:in `ls'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:376:in `block in eager_load'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:368:in `synchronize'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:368:in `eager_load'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:483:in `each'
/app/.global/gems/zeitwerk-2.3.0/lib/zeitwerk/loader.rb:483:in `eager_load_all'
/app/.global/gems/railties-6.0.1/lib/rails/application/finisher.rb:122:in `block in <module:Finisher>'
/app/.global/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `instance_exec'
/app/.global/gems/railties-6.0.1/lib/rails/initializable.rb:32:in `run'
/app/.global/gems/railties-6.0.1/lib/rails/initializable.rb:61:in `block in run_initializers'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:228:in `block in tsort_each'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:431:in `each_strongly_connected_component_from'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:349:in `block in each_strongly_connected_component'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:347:in `each'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:347:in `call'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:347:in `each_strongly_connected_component'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:226:in `tsort_each'
/opt/ruby/2.6/lib/ruby/2.6.0/tsort.rb:205:in `tsort_each'
/app/.global/gems/railties-6.0.1/lib/rails/initializable.rb:60:in `run_initializers'
/app/.global/gems/railties-6.0.1/lib/rails/application.rb:363:in `initialize!'
/app/.global/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `public_send'
/app/.global/gems/railties-6.0.1/lib/rails/railtie.rb:190:in `method_missing'
/app/config/environment.rb:7:in `<top (required)>'

Questo errore si ripete numerose volte nel mio log dell’applicazione. Non sono chiaro su cosa lo stia attivando. Sto utilizzando PostgreSQL 9.6, se ciò è rilevante.

Stai eseguendo l’ultima versione di Discourse? Si tratta di un aggiornamento da una versione molto vecchia di Discourse?

Questa è una nuova installazione pulita di Discourse 2.4, senza precedenti.

Ho anche provato ad aggiornare a Postgres 12. L’errore appare ancora nei miei log.