Sto usando il database PostgreSQL per la mia applicazione Ruby on Rails (su Mac OS X 10.9).
Ci sono istruzioni dettagliate su come aggiornare il database PostgreSQL?
Temo di distruggere i dati nel database o di rovinarli.
Sto usando il database PostgreSQL per la mia applicazione Ruby on Rails (su Mac OS X 10.9).
Ci sono istruzioni dettagliate su come aggiornare il database PostgreSQL?
Temo di distruggere i dati nel database o di rovinarli.
Risposte:
Supponendo che tu abbia usato la birra fatta in casa per installare e aggiornare Postgres, puoi eseguire i seguenti passaggi.
Arresta l'attuale server Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inizializza un nuovo database 10.1:
initdb /usr/local/var/postgres10.1 -E utf8
esegui pg_upgrade
(nota: cambia la versione del cestino se esegui l' aggiornamento da qualcosa di diverso da quello di seguito) :
pg_upgrade -v \
-d /usr/local/var/postgres \
-D /usr/local/var/postgres10.1 \
-b /usr/local/Cellar/postgresql/9.6.5/bin/ \
-B /usr/local/Cellar/postgresql/10.1/bin/
-v
per abilitare la registrazione interna dettagliata
-d
la vecchia directory di configurazione del cluster di database
-D
la nuova directory di configurazione del cluster di database
-b
la vecchia directory eseguibile PostgreSQL
-B
la nuova directory eseguibile PostgreSQL
Sposta nuovi dati in posizione:
cd /usr/local/var
mv postgres postgres9.6
mv postgres10.1 postgres
Riavvia Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verificare i /usr/local/var/postgres/server.log
dettagli e assicurarsi che il nuovo server sia stato avviato correttamente.
Infine, reinstalla la pg
gemma delle rotaie
gem uninstall pg
gem install pg
Ti suggerisco di dedicare del tempo a leggere la documentazione di PostgreSQL per capire esattamente cosa stai facendo nei passaggi precedenti per ridurre al minimo le frustrazioni.
initdb /usr/local/var/postgres9.4 -E utf8 --lc-collate=C --lc-ctype=utf-8 --lc-monetary=C --lc-numeric=C
delete_old_cluster.sh
comando. Avevo prima cancellato manualmente le directory /usr/local/postgres9.3, quindi ho eseguito questo comando e sembra che abbia perso l'intera directory / usr / local / var / postgres (sono stato in grado di ripristinarlo da Time Machine)
gem uninstall pg
ma poi consentire al bundler di reinstallare la versione corretta da Gemfile.lock semplicemente eseguendolo bundle
.
brew
ora ha anche la possibilità di usare brew services stop postgresql
e brew services start postgresql
invece di chiamare direttamente launchctl unload
e launchctl load
.
Nonostante tutte le risposte sopra, ecco i miei 5 centesimi.
Funziona su qualsiasi sistema operativo e da qualsiasi postgres versione.
postgresql.conf
-> port
da 5432
a 5433
;cd
nella bin
cartella della nuova versione ;pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
postgresql.conf
O pg_hba.conf
), dovrai replicare manualmente tali modifiche nella nuova installazione. Invece, se si utilizza pg_upgradecluster
, i file di configurazione vengono copiati nel nuovo cluster: manpages.ubuntu.com/manpages/precise/man8/...
pg_dumpall: could not connect to database "XXX": fe_sendauth: no password supplied
Current releases of the dump programs can read data from any server version back to 7.0.
Ecco la soluzione per gli utenti Ubuntu
Per prima cosa dobbiamo smettere di postgresql
sudo /etc/init.d/postgresql stop
Crea un nuovo file chiamato /etc/apt/sources.list.d/pgdg.list e aggiungi sotto la riga
deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main
Segui i comandi seguenti
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main
sudo /etc/init.d/postgresql start
Ora abbiamo tutto, basta aggiornarlo come di seguito
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main
Questo è tutto. Il cluster per lo più aggiornato verrà eseguito sul numero di porta 5433. Verificare con il comando seguente
sudo pg_lsclusters
Aggiornamento : questo processo è lo stesso per l'aggiornamento da 9.5 a almeno 11.5; semplicemente modificare i comandi per riflettere le versioni 9.6
e 10
, dove 9.6
è la vecchia versione ed 10
è la nuova versione. Assicurati di modificare anche le directory "vecchie" e "nuove" di conseguenza.
Ho appena aggiornato PostgreSQL da 9.5 a 9.6 su Ubuntu e ho pensato di condividere le mie scoperte, dato che ci sono un paio di sfumature specifiche per OS / pacchetto di cui tenere conto.
( Non volevo scaricare e ripristinare i dati manualmente , quindi molte delle altre risposte qui non erano valide.)
In breve, il processo consiste nell'installare la nuova versione di PostgreSQL insieme alla versione precedente (ad es. 9.5 e 9.6) e quindi eseguire il pg_upgrade
binario, che è spiegato in (alcuni) dettagli su https://www.postgresql.org/ docs / 9.6 / static / pgupgrade.html .
L'unico aspetto "ingannevole" pg_upgrade
è che la mancata trasmissione del valore corretto per un argomento o la mancata registrazione come utente corretto o cd
nella posizione corretta prima di eseguire un comando, possono portare a messaggi di errore criptici.
Su Ubuntu (e probabilmente Debian), a condizione che si stia utilizzando il repository "ufficiale" deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
, e purché non siano stati modificati i percorsi predefiniti del file system o le opzioni di runtime, la seguente procedura dovrebbe funzionare.
Installa la nuova versione (nota che specifichiamo 9.6
esplicitamente):
sudo apt install postgresql-9.6
Al termine dell'installazione, entrambe le versioni verranno eseguite fianco a fianco, ma su porte diverse. L'output dell'installazione menziona questo, in fondo, ma è facile da trascurare:
Creating new cluster 9.6/main ...
config /etc/postgresql/9.6/main
data /var/lib/postgresql/9.6/main
locale en_US.UTF-8
socket /var/run/postgresql
port 5433
Arresta entrambe le istanze del server (ciò si interromperà contemporaneamente):
sudo systemctl stop postgresql
Passa all'utente di sistema PostgreSQL dedicato:
su postgres
Passa alla sua home directory (in caso contrario si causeranno errori):
cd ~
pg_upgrade
richiede i seguenti input ( pg_upgrade --help
ci dice questo):
When you run pg_upgrade, you must provide the following information:
the data directory for the old cluster (-d DATADIR)
the data directory for the new cluster (-D DATADIR)
the "bin" directory for the old version (-b BINDIR)
the "bin" directory for the new version (-B BINDIR)
Questi input possono essere specificati con "nomi lunghi", per renderli più facili da visualizzare:
-b, --old-bindir=BINDIR old cluster executable directory
-B, --new-bindir=BINDIR new cluster executable directory
-d, --old-datadir=DATADIR old cluster data directory
-D, --new-datadir=DATADIR new cluster data directory
Dobbiamo anche passare lo --new-options
switch, poiché in caso contrario si ottiene quanto segue:
connection to database failed: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"?
Ciò si verifica perché in assenza di questa opzione vengono applicate le opzioni di configurazione predefinite, il che comporta l'utilizzo di opzioni di connessione errate, quindi l'errore del socket.
Eseguire il pg_upgrade
comando dalla nuova versione di PostgreSQL:
/usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf
Disconnessione dell'account utente di sistema dedicato:
exit
L'aggiornamento è ora completo, ma la nuova istanza si collegherà alla porta 5433
(l'impostazione predefinita è 5432
), quindi tienilo a mente se tenti di provare la nuova istanza prima di "tagliare" su di essa.
Avvia il server normalmente (di nuovo, questo avvierà sia la vecchia che la nuova istanza):
systemctl start postgresql
Se si desidera impostare la nuova versione come predefinita, sarà necessario modificare il file di configurazione effettivo, ad es. /etc/postgresql/9.6/main/postgresql.conf
, E assicurarsi che la porta sia definita come tale:
port = 5432
In tal caso, modificare contemporaneamente il numero di porta della versione 5433
precedente (prima di avviare i servizi) oppure rimuovere semplicemente la versione precedente (ciò non rimuoverà il contenuto del database effettivo; è necessario utilizzarlo apt --purge remove postgresql-9.5
affinché ciò accada ):
apt remove postgresql-9.5
Il comando sopra interromperà tutte le istanze, quindi dovrai avviare la nuova istanza un'ultima volta con:
systemctl start postgresql
Come ultimo punto da notare, non dimenticare di considerare pg_upgrade
i buoni consigli:
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
./analyze_new_cluster.sh
Running this script will delete the old cluster's data files:
./delete_old_cluster.sh
sudo su postgres
, cambiare tutto METODO in pg_hba.conf sia di installazione di fiducia prima pg_upgrade, in esecuzione pg_upgrade in / / tmp privato non ~ non ha funzionato così sudo mkdir /foobar
con chmod 777 /foobar
e corse lì. Finalmente il comando pg_upgrade:/Library/PostgreSQL/9.5/bin/pg_upgrade -b /Library/PostgreSQL/9.2/bin -B /Library/PostgreSQL/9.5/bin -d /Library/PostgreSQL/9.2/data -D /Library/PostgreSQL/9.5/data -o -cconfig_file=/Library/PostgreSQL/9.2/data/postgresql.conf -O -cconfig_file=/Library/PostgreSQL/9.5/data/postgresql.conf
Se stai usando i servizi homebrew e homebrew, probabilmente puoi semplicemente fare:
brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql
Penso che questo potrebbe non funzionare completamente se stai usando le funzionalità avanzate di Postgres, ma ha funzionato perfettamente per me.
Il manuale dell'utente tratta questo argomento in modo approfondito. Puoi:
pg_upgrade
a posto; o
pg_dump
e pg_restore
.
In caso di dubbio, fallo con le discariche. Non cancellare la vecchia directory dei dati, conservala nel caso qualcosa vada storto / commetti un errore; in questo modo puoi semplicemente tornare alla tua installazione 9.3 invariata.
Per i dettagli, consultare il manuale.
Se sei bloccato, pubblica una domanda dettagliata che spiega come sei bloccato, dove e cosa hai provato per primo. Dipende un po 'anche da come hai installato PostgreSQL, dato che esistono diverse "distribuzioni" di PostgreSQL per OS X (purtroppo). Quindi dovresti fornire tali informazioni.
In piedi sulle spalle delle altre povere creature che calpestavano questo letame, sono stato in grado di seguire questi passaggi per tornare su e correre dopo un aggiornamento a Yosemite:
Supponendo che tu abbia usato la birra fatta in casa per installare e aggiornare Postgres, puoi eseguire i seguenti passaggi.
Arresta l'attuale server Postgres:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Inizializza un nuovo database 9.4:
initdb /usr/local/var/postgres9.4 -E utf8
Installa postgres 9.3 (in quanto non era più presente sul mio computer):
brew install homebrew/versions/postgresql93
Aggiungi directory rimosse durante l'aggiornamento di Yosemite:
mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep
correre pg_upgrade
:
pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/
Sposta nuovi dati in posizione:
cd /usr/local/var
mv postgres postgres9.3
mv postgres9.4 postgres
Riavvia Postgres:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Verificare i /usr/local/var/postgres/server.log
dettagli e assicurarsi che il nuovo server sia stato avviato correttamente.
Infine, reinstallare le librerie correlate?
pip install --upgrade psycopg2
gem uninstall pg
gem install pg
brew cleanup
prima della migrazione dei dati e ciò ha causato la disinstallazione di postgres9.3. Questo ha aiutato. :)
Sembra che la soluzione sia stata inserita in Homebrew ora:
$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
....
Questo è stato per me.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Breve e dritto al punto. Onestamente, non intendo capire l'intestino di PostgreSQL, voglio fare cose.
jessie
. Aveva oltre 10 DB e una quantità di ~ 400 MB di dati del database è stata convertita in un batter d'occhio. Poi di nuovo, sto usando un Debian virtuale su un SSD.
pg_upgradecluster 9.4 main
ma ricevo l'errore Errore: specified cluster does not exist
... Immagino, devo installare di nuovo postgresql-9.4 prima con questa guida: wiki.postgresql.org/wiki/Apt#Quickstart
Su Windows ho continuato ad affrontare diversi messaggi di errore durante il tentativo di utilizzo pg_upgrade
.
Ho risparmiato un sacco di tempo per me solo a:
La mia soluzione era quella di fare una combinazione di queste due risorse:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
e
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Il secondo uno ha aiutato di più , allora il primo. Inoltre, non seguire i passaggi in quanto alcuni non sono necessari. Inoltre, se non si è in grado di eseguire il backup dei dati tramite la console di Postgres, è possibile utilizzare un approccio alternativo e eseguirne il backup con pgAdmin 3 o altri programmi, come ho fatto nel mio caso.
Inoltre, il link: https://help.ubuntu.com/stable/serverguide/postgresql.html Ha aiutato a impostare la password crittografata e impostare md5 per l'autenticazione dell'utente di Postgres.
Dopo tutto, per verificare la server
versione di postgres eseguita nel terminale:
sudo -u postgres psql postgres
Dopo aver inserito la password, esegui nel terminale Postgres:
SHOW SERVER_VERSION;
Produrrà qualcosa del tipo:
server_version
----------------
9.4.5
Per impostare e avviare Postgres ho usato il comando:
> sudo bash # root
> su postgres # postgres
> /etc/init.d/postgresql start
> /etc/init.d/postgresql stop
E poi per ripristinare il database da un file:
> psql -f /home/ubuntu_username/Backup_93.sql postgres
O se non funziona prova con questo:
> pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump
E se stai usando Rails fai un bundle exec rake db:migrate
dopo aver tirato il codice :)
Per Mac tramite homebrew:
brew tap petere/postgresql
,
brew install <formula>
(ad es . brew install petere/postgresql/postgresql-9.6
:)
Rimuovi vecchi Postgres:
brew unlink postgresql
brew link -f postgresql-9.6
Se si verifica un errore, non dimenticare di leggere e seguire le istruzioni per la preparazione in ogni passaggio.
Dai un'occhiata qui: https://github.com/petere/homebrew-postgresql
Su Windows 10 da quando avevo npm, ho installato il pacchetto rimraf. npm install rimraf -g
Eseguire il backup di tutti i database uno per uno utilizzando il comando pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Quindi ho installato l'ultima versione PostgreSQL, ovvero 11.2, che mi ha spinto a utilizzare la porta 5433 questa volta.
Seguito da Disinstallazione delle versioni precedenti di PostgreSQL miniera era 10. Si noti che il programma di disinstallazione potrebbe dare un avviso di non eliminare la cartella C:\PostgreSQL\10\data
. Ecco perché abbiamo il passaggio successivo utilizzando rimraf per eliminare definitivamente la cartella e le sue sottocartelle.
passare alla directory di installazione di PostgreSQL ed eseguire il comando rimraf 10
. 10 è un nome di directory. Nota: usa la tua versione precedente di PostgreSQL, ovvero 9.5 o qualcosa del genere.
Ora aggiungi C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
le variabili ambientali di Windows. Nota che la mia nuova versione installata è 11, quindi perché sto usando pg11
.
Passare a C:\PostgreSQL\data\pg11
quindi aprire postgresql.conf
modifica port = 5433
aport = 5432
Questo è tutto. Apri cmd e digitapsql -U postgres
Ora puoi ripristinare tutti i tuoi database di backup uno per uno usando il comando pg_restore -U $username --dbname=$databasename $filename
La mia soluzione per l'aggiornamento da Postgresql 11 a Postgresql 12 su Windows 10 è la seguente.
Come prima osservazione dovrai essere in grado di interrompere e avviare il servizio Postgresql. Puoi farlo con i seguenti comandi in Powershell.
Inizio:
pg_ctl start -D “d:\postgresql\11\data”
Fermare:
pg_ctl stop -D “d:\postgresql\11\data”
Stato:
pg_ctl status -D “d:\postgresql\11\data”
Sarebbe saggio fare un backup prima di eseguire l'aggiornamento. L'istanza Postgresql 11 deve essere in esecuzione. Quindi copiare i globali
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
e quindi per ciascun database
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
o
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Se non è già stato installato, installare Postgresql 12 (poiché anche Postgresql 11 è installato, questo sarà sulla porta 5433)
Quindi eseguire l'aggiornamento come segue:
1) Interrompere il servizio Postgresql 11 (vedere sopra)
2) Modifica il postgresql.conf
file in d:\postgresql\12\data
e cambia port = 5433
inport = 5432
3) Modifica il percorso dell'ambiente utente di Windows ( windows start
quindi digita env
) per puntare a Postgresql 12 anziché a Postresql 11
4) Eseguire l'aggiornamento immettendo il seguente comando.
pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres
(In PowerShell usare backtick (o backquote) `per continuare il comando sulla riga successiva)
5) e infine avviare il nuovo servizio Postgresql 12
pg_ctl start -D “d:\postgresql\12\data”
Penso che questo sia il miglior collegamento per la tua soluzione per aggiornare Postgres alla 9.6
https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/