Ich verwende die PostgreSQL-Datenbank für meine Ruby on Rails-Anwendung (unter Mac OS X 10.9).
Gibt es detaillierte Anweisungen zum Aktualisieren der PostgreSQL-Datenbank?
Ich fürchte, ich werde die Daten in der Datenbank zerstören oder durcheinander bringen.
postgresql
upgrade
user3675188
quelle
quelle
Antworten:
Angenommen, Sie haben Postgres mit Home-Brew installiert und aktualisiert, können Sie die folgenden Schritte ausführen.
Stoppen Sie den aktuellen Postgres-Server:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Initialisieren Sie eine neue 10.1-Datenbank:
initdb /usr/local/var/postgres10.1 -E utf8
Ausführen
pg_upgrade
(Hinweis: Ändern Sie die Bin-Version, wenn Sie ein Upgrade von einer anderen als der folgenden Version durchführen) :-v
um die ausführliche interne Protokollierung zu aktivieren-d
das alte Datenbankcluster-Konfigurationsverzeichnis-D
das neue Datenbankcluster-Konfigurationsverzeichnis-b
das alte ausführbare PostgreSQL-Verzeichnis-B
das neue ausführbare PostgreSQL-VerzeichnisVerschieben Sie neue Daten an ihren Platz:
Starten Sie Postgres neu:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Überprüfen Sie die
/usr/local/var/postgres/server.log
Details und stellen Sie sicher, dass der neue Server ordnungsgemäß gestartet wurde.Schließlich, installieren Sie die Schienen
pg
gemIch schlage vor, Sie nehmen sich etwas Zeit, um die PostgreSQL-Dokumentation zu lesen und genau zu verstehen, was Sie in den obigen Schritten tun, um Frustrationen zu minimieren.
quelle
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
Befehl. Ich hatte zuerst die Verzeichnisse /usr/local/postgres9.3 manuell gelöscht, dann diesen Befehl ausgeführt und anscheinend das gesamte Verzeichnis / usr / local / var / postgres verloren (ich konnte es von Time Machine wiederherstellen)gem uninstall pg
aber dann Bundler die richtige Version von Gemfile.lock neu installieren lassen, indem Sie ihn einfach ausführenbundle
.brew
jetzt auch die Option zu verwendenbrew services stop postgresql
undbrew services start postgresql
anstatt direktlaunchctl unload
und anzurufenlaunchctl load
.Trotz aller Antworten oben gehen hier meine 5 Cent.
Es funktioniert auf jedem Betriebssystem und von jeder Postgres-Version.
postgresql.conf
->port
von5432
nach5433
;cd
in den neuen Versionsordnerbin
.pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
quelle
postgresql.conf
oderpg_hba.conf
) geändert hätten. Stattdessen, wenn Sie verwenden ,pg_upgradecluster
erhalten, Konfigurationsdateien zu dem neuen Cluster kopiert: 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.
Hier ist die Lösung für Ubuntu- Benutzer
Zuerst müssen wir postgresql stoppen
Erstellen Sie eine neue Datei mit dem Namen /etc/apt/sources.list.d/pgdg.list und fügen Sie die folgende Zeile hinzu
Befolgen Sie die folgenden Befehle
Jetzt haben wir alles, müssen es nur noch wie folgt aktualisieren
Das ist es. Der meist aktualisierte Cluster wird auf Portnummer 5433 ausgeführt. Überprüfen Sie dies mit dem folgenden Befehl
quelle
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
und10
wo9.6
ist die alte Version und10
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 ):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:
Beenden Sie beide Serverinstanzen (dies stoppt beide gleichzeitig):
Wechseln Sie zum dedizierten Benutzer des PostgreSQL-Systems:
Wechseln Sie in sein Ausgangsverzeichnis (wenn Sie dies nicht tun, werden Fehler verursacht):
pg_upgrade
erfordert die folgenden Eingaben (pg_upgrade --help
sagt uns dies):Diese Eingaben können mit "langen Namen" angegeben werden, um die Visualisierung zu vereinfachen:
Wir müssen auch den
--new-options
Schalter übergeben, da dies zu Folgendem führt: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:Abmelden vom dedizierten Systembenutzerkonto:
Das Upgrade ist jetzt abgeschlossen, aber die neue Instanz wird an den Port gebunden
5433
(der Standardwert ist5432
). 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):
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: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 verwendenapt --purge remove postgresql-9.5
, damit dies geschieht ):Der obige Befehl stoppt alle Instanzen, daher müssen Sie die neue Instanz ein letztes Mal starten mit:
Vergessen Sie abschließend nicht, den
pg_upgrade
guten Rat zu beachten :quelle
sudo su postgres
Ändern Sie alle Methode in beiden pg_hba.conf der Installation Vertrauen vor pg_upgrade, pg_upgrade in / private / tmp laufen nicht ~ nicht so funktioniertesudo mkdir /foobar
mitchmod 777 /foobar
und lief es dort. Endlich der Befehl 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
Wenn Sie Homebrew- und Homebrew-Dienste verwenden, können Sie wahrscheinlich einfach Folgendes tun:
Ich denke, dass dies möglicherweise nicht vollständig funktioniert, wenn Sie erweiterte Postgres-Funktionen verwenden, aber es hat perfekt für mich funktioniert.
quelle
Das Benutzerhandbuch behandelt dieses Thema ausführlich. Sie können:
pg_upgrade
an Ort und Stelle; oderpg_dump
undpg_restore
.Wenn Sie Zweifel haben, machen Sie es mit Müllkippen. Löschen Sie nicht das alte Datenverzeichnis, sondern bewahren Sie es für den Fall auf, dass etwas schief geht oder Sie einen Fehler machen. Auf diese Weise können Sie einfach zu Ihrer unveränderten 9.3-Installation zurückkehren.
Einzelheiten finden Sie im Handbuch.
Wenn Sie nicht weiterkommen, stellen Sie eine detaillierte Frage, in der erläutert wird, wie Sie feststecken, wo und was Sie zuerst versucht haben. Es hängt ein wenig davon ab, wie Sie PostgreSQL installiert haben, da es (leider) verschiedene "Distributionen" von PostgreSQL für OS X gibt. Sie müssten diese Informationen also bereitstellen.
quelle
Ich stand auf den Schultern der anderen armen Kreaturen, die durch diesen Dreck traten, und konnte die folgenden Schritte ausführen, um nach einem Upgrade auf Yosemite wieder einsatzbereit zu sein:
Angenommen, Sie haben Postgres mit Home-Brew installiert und aktualisiert, können Sie die folgenden Schritte ausführen.
Stoppen Sie den aktuellen Postgres-Server:
launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Initialisieren Sie eine neue 9.4-Datenbank:
initdb /usr/local/var/postgres9.4 -E utf8
Installieren Sie postgres 9.3 (da es auf meinem Computer nicht mehr vorhanden war):
brew install homebrew/versions/postgresql93
Fügen Sie Verzeichnisse hinzu, die während des Yosemite-Upgrades entfernt wurden:
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
run
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/
Verschieben Sie neue Daten an ihren Platz:
Starten Sie Postgres neu:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Überprüfen Sie die
/usr/local/var/postgres/server.log
Details und stellen Sie sicher, dass der neue Server ordnungsgemäß gestartet wurde.Schließlich verwandte Bibliotheken neu installieren?
quelle
brew cleanup
vor der Datenmigration versehentlich ausgeführt worden, wodurch postgres9.3 deinstalliert wurde. Das hat geholfen. :)Sieht so aus, als wäre die Lösung jetzt in Homebrew eingebrannt:
quelle
Das hat es für mich getan.
https://gist.github.com/dideler/60c9ce184198666e5ab4
Kurz und auf den Punkt. Ich möchte ehrlich gesagt nicht den Mut von PostgreSQL verstehen, ich möchte Dinge erledigen.
quelle
jessie
. Hatte mehr als 10 DBs und eine Menge von ~ 400 MB Datenbankdaten wurde im Handumdrehen konvertiert. Andererseits verwende ich ein virtuelles Debian auf einer SSD.pg_upgradecluster 9.4 main
aber ich erhalte den Fehler Fehler:specified cluster does not exist
... Ich denke, ich muss postgresql-9.4 zuerst mit dieser Anleitung erneut installieren: wiki.postgresql.org/wiki/Apt#QuickstartUnter Windows wurden bei der Verwendung immer wieder verschiedene Fehlermeldungen angezeigt
pg_upgrade
.Ich habe viel Zeit gespart, um nur:
quelle
Meine Lösung bestand darin, eine Kombination dieser beiden Ressourcen zu erstellen:
https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d
und
http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4
Die zweite ein half mehr , dann dem ersten. Um dies nicht zu tun, befolgen Sie die Schritte nicht so, wie sie sind, da einige nicht erforderlich sind. Wenn Sie die Daten nicht über die Postgres-Konsole sichern können, können Sie einen alternativen Ansatz verwenden und sie mit pgAdmin 3 oder einem anderen Programm sichern, wie ich es in meinem Fall getan habe.
Außerdem der Link: https://help.ubuntu.com/stable/serverguide/postgresql.html Hilft beim Festlegen des verschlüsselten Kennworts und beim Festlegen von md5 für die Authentifizierung des Postgres-Benutzers.
Nachdem alles erledigt ist, überprüfen Sie
server
die im Terminal ausgeführte Postgres- Version:Nach Eingabe des Passworts im Postgres-Terminal ausführen:
Es wird etwas ausgegeben wie:
Zum Setzen und Starten von Postgres habe ich den folgenden Befehl verwendet:
Und dann zum Wiederherstellen der Datenbank aus einer Datei:
Oder wenn es nicht funktioniert, versuchen Sie es mit diesem:
Und wenn Sie Rails verwenden, machen Sie eine
bundle exec rake db:migrate
nach dem Ziehen des Codes :)quelle
Für Mac über Homebrew:
brew tap petere/postgresql
,brew install <formula>
(zBbrew install petere/postgresql/postgresql-9.6
)Alte Postgres entfernen:
brew unlink postgresql
brew link -f postgresql-9.6
Wenn ein Fehler auftritt, vergessen Sie nicht, die Brauanweisungen in jedem Schritt zu lesen und zu befolgen.
Weitere Informationen finden Sie unter : https://github.com/petere/homebrew-postgresql
quelle
Unter Windows 10 habe ich, da ich npm hatte, das rimraf-Paket installiert.
npm install rimraf -g
Sichern Sie alle Ihre Datenbanken einzeln mit dem Befehl
pg_dump -U $username --format=c --file=$mydatabase.sqlc $dbname
Dann installierte ich die neueste PostgreSQL-Version, dh 11.2, die mich dieses Mal dazu veranlasste, Port 5433 zu verwenden.
Gefolgt von Deinstallation älterer Versionen von PostgreSQL Mine war 10. Beachten Sie, dass das Deinstallationsprogramm möglicherweise eine Warnung ausgibt, dass Ordner nicht gelöscht werden
C:\PostgreSQL\10\data
. Deshalb haben wir den nächsten Schritt mit rimraf, um den Ordner und seine Unterordner dauerhaft zu löschen.Wechseln Sie in das PostgreSQL-Installationsverzeichnis und führen Sie den Befehl aus
rimraf 10
. 10 ist ein Verzeichnisname. Beachten Sie, dass Sie Ihre ältere Version von PostgreSQL verwenden, dh 9.5 oder so.Fügen Sie nun
C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib
die Windows-Umgebungsvariablen hinzu. Beachten Sie, dass meine neu installierte Version 11 ist, weshalb ich sie verwendepg11
.Navigieren Sie zu
C:\PostgreSQL\data\pg11
und öffnen Sie dannpostgresql.conf
Bearbeitenport = 5433
zuport = 5432
Das ist es. Öffnen Sie cmd und geben Sie ein
psql -U postgres
Mit dem Befehl können Sie jetzt alle Ihre gesicherten Datenbanken einzeln wiederherstellen
pg_restore -U $username --dbname=$databasename $filename
quelle
Meine Lösung für das Upgrade von Postgresql 11 auf Postgresql 12 unter Windows 10 lautet wie folgt.
Als erste Bemerkung müssen Sie in der Lage sein, den Postgresql-Dienst zu stoppen und zu starten. Sie können dies mit den folgenden Befehlen in Powershell tun.
Anfang:
pg_ctl start -D “d:\postgresql\11\data”
Halt:
pg_ctl stop -D “d:\postgresql\11\data”
Status:
pg_ctl status -D “d:\postgresql\11\data”
Es ist ratsam, vor dem Upgrade ein Backup zu erstellen. Die Postgresql 11-Instanz muss ausgeführt werden. Dann kopieren Sie die Globals
pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql
und dann für jede Datenbank
pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc
oder
pg_dump -U postgres -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc
Wenn dies noch nicht geschehen ist, installieren Sie Postgresql 12 (da auch Postgresql 11 installiert ist, befindet sich dies auf Port 5433).
Führen Sie dann das Upgrade wie folgt durch:
1) Beenden Sie den Postgresql 11-Dienst (siehe oben).
2) Bearbeiten Sie die
postgresql.conf
Datei ind:\postgresql\12\data
und wechseln Sieport = 5433
zuport = 5432
3) Bearbeiten Sie den Pfad der Windows-Benutzerumgebung (geben Sie
windows start
dann einenv
), um auf Postgresql 12 anstelle von Postresql 11 zu verweisen4) Führen Sie das Upgrade durch, indem Sie den folgenden Befehl eingeben.
(Verwenden Sie in Powershell Backtick (oder Backquote), um den Befehl in der nächsten Zeile fortzusetzen.)
5) und starten Sie schließlich den neuen Postgresql 12-Dienst
pg_ctl start -D “d:\postgresql\12\data”
quelle
Ich denke, dies ist der beste Link für Ihre Lösung, um Postgres auf 9.6 zu aktualisieren
quelle