Update : Dieser Vorgang ist der gleiche für das Upgrade von 9.5 auf mindestens 11.5. Ändern Sie einfach die Befehle, um Versionen widerzuspiegeln, 9.6
und 10
wo 9.6
ist die alte Version und 10
ist die neue Version. Stellen Sie sicher, dass Sie auch die Verzeichnisse "alt" und "neu" entsprechend anpassen.
Ich habe gerade PostgreSQL 9.5 unter Ubuntu auf 9.6 aktualisiert und dachte, ich würde meine Erkenntnisse teilen, da es einige betriebssystem- / paketspezifische Nuancen gibt, die beachtet werden müssen.
( Ich wollte keine Daten manuell sichern und wiederherstellen müssen , daher waren einige der anderen Antworten hier nicht realisierbar.)
Kurz gesagt, der Prozess besteht darin, die neue Version von PostgreSQL neben der alten Version (z. B. 9.5 und 9.6) zu installieren und dann die pg_upgrade
Binärdatei auszuführen, die in (einigen) Details unter https://www.postgresql.org/ erläutert wird. docs / 9.6 / static / pgupgrade.html .
Der einzige "knifflige" Aspekt pg_upgrade
ist, dass der richtige Wert für ein Argument nicht übergeben oder nicht als der richtige Benutzer oder angemeldet werden kanncd
am richtigen Ort vor der Ausführung eines Befehls zu kryptischen Fehlermeldungen führen kann.
Unter Ubuntu (und wahrscheinlich unter Debian) deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
sollte das folgende Verfahren ausgeführt werden , sofern Sie das "offizielle" Repo verwenden und die Standardpfade des Dateisystems oder die Laufzeitoptionen nicht geändert haben.
Installieren Sie die neue Version (beachten Sie, dass wir die 9.6
explizit angeben ):
sudo apt install postgresql-9.6
Sobald die Installation erfolgreich ist, werden beide Versionen nebeneinander ausgeführt, jedoch an unterschiedlichen Ports. In der Installationsausgabe wird dies unten erwähnt, aber es ist leicht zu übersehen:
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
Beenden Sie beide Serverinstanzen (dies stoppt beide gleichzeitig):
sudo systemctl stop postgresql
Wechseln Sie zum dedizierten Benutzer des PostgreSQL-Systems:
su postgres
Wechseln Sie in sein Ausgangsverzeichnis (wenn Sie dies nicht tun, werden Fehler verursacht):
cd ~
pg_upgrade
erfordert die folgenden Eingaben ( pg_upgrade --help
sagt uns dies):
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)
Diese Eingaben können mit "langen Namen" angegeben werden, um die Visualisierung zu vereinfachen:
-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
Wir müssen auch den --new-options
Schalter übergeben, da dies zu Folgendem führt:
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"?
Dies liegt daran, dass die Standardkonfigurationsoptionen ohne diesen Schalter angewendet werden, was dazu führt, dass falsche Verbindungsoptionen verwendet werden, daher der Socket-Fehler.
Führen Sie den pg_upgrade
Befehl aus der neuen PostgreSQL-Version aus:
/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
Abmelden vom dedizierten Systembenutzerkonto:
exit
Das Upgrade ist jetzt abgeschlossen, aber die neue Instanz wird an den Port gebunden 5433
(der Standardwert ist 5432
). Denken Sie also daran, wenn Sie versuchen, die neue Instanz zu testen, bevor Sie sie "umschneiden".
Starten Sie den Server wie gewohnt (dies startet erneut sowohl die alte als auch die neue Instanz):
systemctl start postgresql
Wenn Sie die neue Version als Standardversion festlegen möchten, müssen Sie beispielsweise die effektive Konfigurationsdatei bearbeiten /etc/postgresql/9.6/main/postgresql.conf
und sicherstellen, dass der Port als solcher definiert ist:
port = 5432
Wenn Sie dies tun, ändern Sie entweder gleichzeitig die Portnummer der alten Version 5433
(vor dem Starten der Dienste) oder entfernen Sie einfach die alte Version (dadurch wird Ihr tatsächlicher Datenbankinhalt nicht entfernt; Sie müssten dies verwenden apt --purge remove postgresql-9.5
, damit dies geschieht ):
apt remove postgresql-9.5
Der obige Befehl stoppt alle Instanzen, daher müssen Sie die neue Instanz ein letztes Mal starten mit:
systemctl start postgresql
Vergessen Sie abschließend nicht, den pg_upgrade
guten Rat zu beachten :
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