Durante lâaggiornamento, ho ricevuto
Arresto del server del database PostgreSQL 15: mainErrore: il proprietario della configurazione (postgres:101) e il proprietario dei dati (runit-log:999) non corrispondono e il proprietario della configurazione non è root ⌠fallito!
fallito!
impossibile aprire il file di versione â/shared/postgres_data/PG_VERSIONâ: Permesso negato
Fallimento, in uscita
che è stato risolto da
sudo ./launcher enter app
e poi
chown -R postgres:postgres /shared/postgres_data
chown -R postgres:postgres /shared/postgres_run
chmod -R 700 /shared/postgres_data
Sono in un loop infinito, il database è stato aggiornato correttamente ma quando eseguo ./launcher rebuild app continua a ciclare, lâunica cosa che riesco a vedere è quanto segue
MODIFICA: Trovato questo messaggioâŚ
mv: spostamento tra dispositivi non riuscito: '/shared/postgres_data_new' a '/shared/postgres_data/postgres_data_new'; impossibile rimuovere il target: Directory non vuota
La tua installazione contiene estensioni che dovrebbero essere aggiornate
con il comando ALTER EXTENSION. Il file
update_extensions.sql
quando eseguito da psql dall'utente super-root del database aggiornerĂ
queste estensioni.
Per favore, consigliami
Aggiornamento Completato
----------------
Le statistiche dell'ottimizzatore non vengono trasferite da pg_upgrade.
Una volta avviato il nuovo server, considera l'esecuzione di:
/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages
L'esecuzione di questo script eliminerĂ i file di dati del vecchio cluster:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
AGGIORNAMENTO DI POSTGRES COMPLETATO
Il vecchio database 13 è memorizzato in /shared/postgres_data_old
Per completare l'aggiornamento, ricostruisci di nuovo usando:
./launcher rebuild app
-------------------------------------------------------------------------------------
Ok, quindi sembra che questo sia il problema qui:
Questi si trovano in shared/standalone/ e sono giĂ stati spostati manualmenteâŚ
mv: impossibile spostare '/shared/postgres_data' a '/shared/postgres_data_old': Dispositivo o risorsa occupati
mv: spostamento tra dispositivi non riuscito: '/shared/postgres_data_new' a '/shared/postgres_data/postgres_data_new'; impossibile rimuovere il target: Directory non vuota
I, [2025-02-08T15:22:42.078189 #1] INFO -- : Generazione delle localizzazioni (potrebbe richiedere del tempo)...
Nessuna soluzione sembra funzionare. Ă cosĂŹ frustrante.
Sarebbe molto insolito che qualcuno offrisse un tale servizio senza che gli fosse stato prima richiesto.
Se desideri assumere qualcuno, questo è il posto giusto: Marketplace - Discourse Meta
La nostra istanza multi-sito è inattiva dopo lâaggiornamento. Diceva:
La tua installazione contiene estensioni che dovrebbero essere aggiornate
con il comando ALTER EXTENSION. Il file
update_extensions.sql
quando eseguito da psql dallâutente superadmin del database aggiornerĂ
queste estensioni.
Non riesco a trovare il file update_extensions.sql da nessuna parte. Dove potrebbe trovarsi?
Controlla questo
mv: impossibile spostare '/shared/postgres_data' in '/shared/postgres_data_old': dispositivo o risorsa occupato
mv: spostamento inter-dispositivo non riuscito: '/shared/postgres_data_new' in '/shared/postgres_data/postgres_data_new'; impossibile rimuovere il target: Directory non vuota
I, [2025-02-08T15:22:42.078189 #1] INFO -- : Generazione delle localizzazioni (potrebbe richiedere un po' di tempo)...
Sono stato io. Offro aiuto quando sembra che qualcuno si trovi in una situazione che sarĂ difficile da risolvere con lâaiuto qui.
Domanda per curiositĂ .
Esiste uno standard o una strategia relativa agli aggiornamenti dei componenti chiave, come Postgres?
Vedo che il supporto per Postgres 13 è durato fino allâ11/25, che la versione 15 durerĂ fino al 2027 e che la versione attuale è la 17.
Sto davvero solo cercando di imparare e capire. Cambiare versione del database è generalmente un grosso problema e un lavoro impegnativo.
Grazie!
Sono stato in giro sin da Postgres 10. Di solito aggiornano ogni due versioni, anche se sono passati da 12 a 13 perchĂŠ aveva alcuni miglioramenti che rendevano vantaggioso un cambio anticipato. Sono stato un poâ sorpreso che non siano passati direttamente a 16.
In genere, tutto va abbastanza liscio se hai abbastanza spazio su disco e Docker recente.
Sono tornato al modello 13 finchĂŠ non ci sarĂ una correzione, grazie
Ho risolto il problema che avevo con lâaggiornamento di PostgreSQL da 13 a 15, dopo aver ripristinato il server con lâaggiornamento fallito dai backup, i seguenti passaggi hanno funzionato per me con una locale PostgreSQL en_GB.UTF-8:
sudo -i
su - discourse
cd /var/discourse
git stash
git stash drop
git pull
./launcher stop app
docker run --rm \
--entrypoint=/bin/bash \
-e LANG='en_GB.UTF-8' \
-v /var/discourse/shared/standalone/postgres_data:/var/lib/postgresql/13/data \
-v /var/discourse/shared/standalone/postgres_data_new:/var/lib/postgresql/15/data \
tianon/postgres-upgrade:13-to-15 \
-c 'sed -i "s/^# $LANG/$LANG/" /etc/locale.gen && locale-gen &&
apt-get update && apt-get install -y postgresql-13-pgvector postgresql-15-pgvector &&
docker-upgrade'
exit
mv /var/discourse/shared/standalone/postgres_data /var/discourse/shared/standalone/postgres_data_old
mv /var/discourse/shared/standalone/postgres_data_new /var/discourse/shared/standalone/postgres_data
chown -R 101:104 /var/discourse/shared/standalone/postgres_data
su - discourse
cd /var/discourse
docker run --rm -v /var/discourse/shared/standalone:/shared \
local_discourse/app chown -R postgres:postgres /shared/postgres_data
./launcher rebuild app
Ho dovuto rimuovere le modifiche locali apportate in passato per la LANG di PostgreSQL usando git stash; git stash drop e lo spostamento delle directory dei dati di PostgreSQL doveva essere fatto come root e era necessario un chown.
à richiesto git pull questa volta? Di solito non lo è.
Oggigiorno non è mai necessario, perchÊ la ricostruzione lo fa.
Il messaggio finale Device or resource busy (dispositivo o risorsa occupato) dal primo errore implica che qualcosâaltro sta bloccando la directory postgres_data, impedendone lo spostamento.
PoichÊ si tratta della directory del database, una spiegazione probabile è che postgres_data possa essere un punto di mount. Ciò è ancora piÚ probabile poichÊ vediamo inter-device move failed (spostamento inter-dispositivo non riuscito) nel secondo comando mv, il che implica che shared/postgres_data_new e shared/postgres_data si trovino su dischi/partizioni diverse.
Se confermi che postgres_data è un punto di mount, dovrai spostare manualmente tutti i file da postgres_data in unâaltra directory di backup, e quindi spostare tutti i file da postgres_data_new nella directory postgres_data (ora vuota). Entrambi gli spostamenti dovrebbero essere eseguiti dopo il completamento della prima ricostruzione con UPGRADE OF POSTGRES COMPLETE ma prima di avviare la seconda.
Se postgres_data non è un punto di mount, lsof è il tuo amico. Puoi usarlo per cercare di identificare cosa sta causando il blocco.
Ovviamente, esegui prima i backup necessari.
Questo è perfetto, grazie.
I file si trovavano nella seguente cartella:
/var/postgres_data_discourse come postgres_data_new
Quanto segue ha risolto il problema.
Ho spostato postgres_data_new in /var
Rinominato postgres_data_discourse in postgres_data_discourse_old
Rinominato postgres_data_new in postgres_data_discourse
Eseguito ./launcher rebuild app
Grazie ancora ![]()
Ho 62g di db, cosa suggerisci per eseguire il miglior aggiornamento?
62G /var/discourse/shared/standalone/postgres_data
Ti consiglio di spostarti su una nuova VM, avviare un nuovo Discourse, con un database vuoto (copiando le directory ssl e letsencrypt se desideri un passaggio a zero tempi di inattivitĂ ) e ripristinare il database corrente sul nuovo server. Questo ti permette di eseguire lâaggiornamento con tempi di inattivitĂ pari a zero e rischio nullo che qualcosa possa andare storto.
Probabilmente non è troppo presto per aggiornare comunque il tuo sistema operativo.
Questa è una buona idea.
Posso spostare il backup ### 3.4.0.beta4-dev ### nella nuova installazione dellâultima versione?
Se stai chiedendo se puoi ripristinare qualsiasi versione vecchia di Discourse a qualsiasi nuova versione di Discourse che potresti ottenere, la risposta è sÏ.