Artikel mit Tag migration

MERGE: PostgreSQL 14 Cluster auf PostgreSQL 15 aktualisieren

Wie jedes Jahr im Herbst wurde auch 2022 eine neue PostgreSQL Version veröffentlicht.

postgres_logo

Zu den größten Neuerungen von Version 15 zählt sicherlich die Einführung des MERGE Befehls. Zusätzlich wurde die logische Replikation um das Filtern nach Zeilen erweitert. Ebenfalls erwähnenswert ist die Einführung von zstd. Der Datenkompressionsalgorithmus aus dem Hause Facebook spart Zeit und Plattenplatz.

Alle Neuerungen lassen sich dem Release Log entnehmen.

Installation und Update auf PostgreSQL 15 unter Debian/Ubuntu

# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Update the package lists:
sudo apt-get update

# Install the latest version of PostgreSQL.
sudo apt-get -y install postgresql-15

# Sicherung erstellen
sudo su postgres
pg_dumpall > Sicherung
exit

#Vorhandene Cluster anzeigen
pg_lsclusters

#Neues Cluster anhalten
sudo pg_dropcluster --stop 15 main

#Vorhandenes Cluster aktualisieren
sudo pg_upgradecluster 14 main

# Neues Cluster prüfen
sudo pg_ctlcluster 15 main status
sudo pg_isready

#Altes Cluster verwerfen
sudo pg_dropcluster 14 main

PostgreSQL 12 und pgAdmin 4 unter Ubuntu installieren oder aktualisieren

Nach gut einem Jahr wurde vor wenigen Tagen die Version 12 der Datenbanklösung PostgreSQL veröffentlicht.

Das Release steht im Zeichen der Performance und bietet beispielsweise mit REINDEX CONCURRENTLY nun eine Möglichkeit Indizes im laufenden Betrieb ohne Einbußen zu erneuern.

Weitere Änderungen sind im Changelog zu finden. Dort finden sich zusätzlich Anweisungen, welche für die ein oder andere Migration relevant sein dürften.

postgres_logo

PostgreSQL 12 unter Ubuntu installieren

Bei der Aktualisierung der vorhandenen Version hat sich nicht allzu viel getan. Der Vorgang ist analog zu Version 11.
 

sudo sh -c  'echo "deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

sudo apt update

sudo apt install postgresql-11

Nun kann überprüft werden, ob das System korrekt funktioniert. Dazu wird in die Postgres Console gewechselt.

sudo -u postgres psql

postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

postgresql12


PostgreSQL 11 auf PostgreSQL 12 aktualisieren

Nachdem die neueste Version installiert wurde, kann die alte im folgenden migriert werden.

Unbedingt eine Sicherung der vorhandenen Datenbanken machen.

pg_dumpall > /temp/sicherung

Noch einmal die Installationsinfos anzeigen lassen.

sudo pg_lsclusters

Ver Cluster Port Status Owner    Data directory              Log file
11  main    5432 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log

Sollte eine neue Version bereits installiert sein, muss diese zunächst gestoppt werden.

sudo pg_dropcluster 12 main --stop

Danach das alte Cluster migrieren.

sudo pg_upgradecluster 11 main

Sollte der Vorgang erfolgreich gewesen sein, kann das alte Cluster entfernt werden.

sudo pg_dropcluster 11 main


pgAdmin_4

pgAdmin 4 für PostgreSQL 12 installieren

Für viele bietet sich zur Verwaltung eine grafische Oberfläche an, hier kann der Quasistandard pgAdmin genutzt werden.

Das Tool hat sich in den letzten Jahren gut entwickelt und viele Kinderkrankheiten überwunden.

Das benötigte Repository ist durch die vorhergehende PostgreSQL Installation bereits vorhanden.

sudo apt install pgadmin4 pgadmin4-apache2

Das erste Paket installiert das Tool an sich, das zweite installiert das Webinterface dazu. Bei der Installation werden Mailadresse und Passwort abgefragt, dies wird später für den Login benötigt.

Die fertige Installation kann über den Browser aufgerufen werden.


http://localhost/pgadmin4/

 

Ubuntu - PostgreSQL Migration - Update eines 8.x Datenbank Servers auf 9.x

Nicht nur ein System im Allgemeinen sollte auf Stand gehalten werden, sondern auch die dort installierten Pakete. Neben Web,- oder Mailservern sind auf vielen Rechnern auch Datenbankserver installiert.

Heute soll es genau um diese gehen. Die Aufgabe ist es, einen PostgreSQL Datenbankserver 8.x auf 9.x zu aktualisieren. 

Vorgehensweise Update

Ein Update des installierten DB Servers kann von Hand vorgenommen werden. Hierzu müssen lediglich die aktuelleren Pakete installiert werden.

sudo apt-get install postgresql-9.x

Bei einigen Nutzern geschieht dieses jedoch von ganz alleine, indem sie beispielsweise ihre Ubuntu Version  von 11.04 auf 11.11 oder von 10.04. auf 12.04, usw. aktualisieren.

Nach einem Distributions Update laufen somit zwei Instanzen (z.B. 8.x und 9.x) auf einem Server, diese sollten zu einer aktuellen zusammengefasst werden.

postgresql

Migration PostgreSQL Server von 8.x auf 9.x

Als erster Schritt wird ein Backup der vorhandenen Datenbank gemacht.

sudo pg_dump -U user -W > /home/user/db_backup

Danach kann mit der Migration begonnen werden, diese muss als Benutzer "postgres" durchgeführt werden. (Der Nutzer sollte genügend Rechte besitzen, um den DB Server zu beenden oder zu starten).

su postgres

pg_dropcluster --stop 9.x main

pg_upgradecluster 8.x main

Stopping old cluster...

Disabling connections to the old cluster during upgrade...

Restarting old cluster with restricted connections...

Creating new cluster (configuration: /etc/postgresql/9.x/main, data: /var/lib/postgresql/9.x/main)...

Moving configuration file /var/lib/postgresql/9.x/main/postgresql.conf to /etc/postgresql/9.x/main...

Moving configuration file /var/lib/postgresql/9.x/main/pg_hba.conf to /etc/postgresql/9.x/main...

Moving configuration file /var/lib/postgresql/9.x/main/pg_ident.conf to /etc/postgresql/9.x/main...

Configuring postgresql.conf to use port 5433...

Disabling connections to the new cluster during upgrade...

Roles, databases, schemas, ACLs...

Fixing hardcoded library paths for stored procedures...

Upgrading database postgres...

Analyzing database postgres...

Re-enabling connections to the old cluster...

Re-enabling connections to the new cluster...

Copying old configuration files...

Copying old start.conf...

Copying old pg_ctl.conf...

Stopping target cluster...

Stopping old cluster...

Disabling automatic startup of old cluster...

Configuring old cluster to use a different port (5433)...

Starting target cluster on the original port...
 

Nach einer erfolgreichen Migration kann der Datenbank Server neu gestartet werden. Erfolgt dies ohne Fehler können die alten DB Server Pakete entfernt werden.

sudo service postgresql restart

     Restarting PostgreSQL 9.x database server
sudo apt-get remove postgresql-8.x

Nun ist der Datenbank Server mit allen vorhandenen Datenbanken auf einem aktuellen Stand.

Fehlersuche

Klar kann es auch bei dieser Migration zu Fehlern kommen. So kann es vorkommen, dass das alte DB Paket bereits entfernt wurde. Diese muss dann einfach noch einmal installiert werden, um eine Migration durchzuführen.

sudo apt-get install postgresql-8x

Der neue Server kann nach der Migration manchmal nicht starten und wirft folgenden Fehler:

The PostgreSQL server failed to start. Please check the log output:

CET FATAL:  could not create shared memory segment: Das Argument ist ungültig

CET DETAIL:  Failed system call was shmget(key=543...1, size=348...., 03600).

CET HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 34881536 bytes), reduce PostgreSQL's shared memory usage, perhaps by reducing shared_buffers or max_connections.

        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.

        The PostgreSQL documentation contains more information about shared memory configuration.

Error: Could not start target cluster; please check configuration and log files

Hier genügt es die Konfiguration des neuen Servers anzupassen.

sudo /etc/postgresql/9.x/main/postgresql.conf

max_connections = 10

oder

shared_buffers = 50MB

Spätestens nach dem Beheben dieser Fehler sollte der PostgreSQL Server 9.x ohne Probleme starten

sudo service postgresql start