Contents

postgres in place update

postgres in place update

Das Problem

Ich verwalte viele meine Projekte als Docker compose Setup. Dadurch bedingt sind teils nicht alle “drehenden Teile” innerhalb eines compose files in sync mit der eigentlichen Applikation. Als Beispiel: mein Mastodon Server hat eine feste postgres Version seit dem ersten Deployment enthalten:

mastodon-db:
    restart: always
    image: postgres:14-alpine
    container_name: "mastodon-db"
    healthcheck:
      test: pg_isready -U postgres
    environment:
      POSTGRES_HOST_AUTH_METHOD: trust
    volumes:
      - "./mastodon/postgres:/var/lib/postgresql/data"
    networks:
      - backend

In den Release notes für den nächsten Mastodon Release ist mir dann folgendes aufgefallen:

⚠️ The minimum supported version for PostgreSQL has been bumped to PostgreSQL 14

Ok - kein akutes Problem aber das holt einen früher oder später ein 😺

Lösung durch Upgrade Docker container

Dankenswerterweise gibt es dafür das Projekt pgautoupgrade ! Zunächst der Hinweis:

❗ macht ein Backup eurer Daten ❗

Ok, weiter im Text! Nach dem Backup erstmal das Projekt gestoppt, dann im compose das postgres Image gegen das mit dem gewünschten Upgrade getauscht und mit docker compose up db den Datenbank Container hochgefahren und das Update durchlaufen lassen:

-    image: postgres:14-alpine
+    image: pgautoupgrade/pgautoupgrade:15-alpine

Danach die Originale Zeile wieder einfügen (natürlich dann die postgres Version einen hochzählen) und den Stack wieder starten.

https://md.kendoo.eu/uploads/7dccf772-c526-4342-8e9e-9188e5d2af42.png