Bei kleinen Updates im aktuellen Release muss nicht viel beachtet werden.
Etwas komplizierter wird es, wenn die größeren Sprünge durchgeführt werden müssen. Es gibt viele unterschiedliche Methoden da draußen, die folgende ist meiner Recherche nach die einfachste.
Ein Upgrade von Major Version zu Major Version.
NEU: Für ganz ungeduldige habe ich einen Konsole only Abschnitt. Da gibts nur Befehle, keine Erklärungen.
Letzte Aktualisierung:
Nach dem einloggen in das Jail z.B. mit bastille console db, wechseln wir mit cd ~ in das Home Verzeichnis und erstellen von der aktuellen PostgresSQL Version mit pkg create postgresql13-server ein Paket der alten PostgreSQL 13 Version. Dieses Paket wird dann in einen temporären Ordner ausgepackt, da wir an das "alte" Programm pg_upgrade explizit in der Version 13 nochmal ran müssen: mkdir /tmp/pg-upgrade && tar xf postgresql13-server-13.23_1.pkg -C /tmp/pg-upgrade
Hintergrund: Es können nicht zwei verschiedene PostgreSQL Versionen gleichzeitig installiert sein!
Nun ist es Zeit die alte Datenbank mit service postgresql stop zu stoppen und Datenbank Verzeichnis mit cp -r /var/db/postgres/data13 /var/db/postgres/data13.bak zu sichern.
Jetzt kann die alte installierte Version mit pkg delete -f postgresql13-server postgresql13-client postgresql13-contrib entfernt und durch die neue Version mit pkg install -y postgresql17-server postgresql17-client postgresql17-contrib ersetzt werden. Diese neue Version wird dann auch direkt initialisiert: service postgresql initdb
Jetzt kommt der entscheidende Teil. Die Migration. Je nach Größe kann das natürlich etwas dauern. Dabei werden alle Datenbanken aus dem Ordner /var/db/postgres/data13/ in den neuen Ordner /var/db/postgres/data17/ kopiert und an die neue Version angepasst:
su -l postgres -c "pg_upgrade -b /tmp/pg-upgrade/usr/local/bin/ -d /var/db/postgres/data13/ -B /usr/local/bin/ -D /var/db/postgres/data17/ -U postgres"
Neben den Datenbanken müssen natürlich auch die aktuellen Konfigurationen übernommen werden.
Zuvor sichern wir die neue "leere" Konfigurationsdatei mit cp /var/db/postgres/data17/pg_hba.conf /var/db/postgres/data17/pg_hba.conf.bak und kopieren dann die alte pg_hba.conf Datei einfach wieder in das neue Verzeichnis mit cp /var/db/postgres/data13/pg_hba.conf /var/db/postgres/data17/pg_hba.conf rein.
Nun kann die Datenbank mit service postgresql start wieder gestartet und die Funktion überprüft werden.
Mit /usr/local/bin/vacuumdb -U postgres --all --analyze-in-stages werden die Statistiken für die neue Datenbank erzeugt und dann kann auch die alte Datenbank mit rm -rf /var/db/postgres/data13 entfernt werden. Dabei schmeißen wir mit rm /var/db/postgres/delete_old_cluster.sh noch ein Überbleibsel weg.
cd ~
pkg create postgresql13-server
mkdir /tmp/pg-upgrade
tar xf postgresql13-server-13.23_1.pkg -C /tmp/pg-upgrade
service postgresql stop
cp -r /var/db/postgres/data13 /var/db/postgres/data13.bak
pkg delete -f postgresql13-server postgresql13-client postgresql13-contrib
pkg install -y postgresql17-server postgresql17-client postgresql17-contrib
service postgresql initdb
su -l postgres -c "pg_upgrade -b /tmp/pg-upgrade/usr/local/bin/ -d /var/db/postgres/data13/ -B /usr/local/bin/ -D /var/db/postgres/data17/ -U postgres"
cp /var/db/postgres/data17/pg_hba.conf /var/db/postgres/data17/pg_hba.conf.bak
cp /var/db/postgres/data13/pg_hba.conf /var/db/postgres/data17/pg_hba.conf
service postgresql start
/usr/local/bin/vacuumdb -U postgres --all --analyze-in-stages
rm -rf /var/db/postgres/data13
rm /var/db/postgres/delete_old_cluster.sh
Voilá