Nextcloud - Upgrading PostgreSQL database running as Docker container from 17 to 18

Published on Author admin

Append YAML file with docker-compose definition for new PostgreSQL 18 database:

  nextcloud-postgres18:
    container_name: nextcloud-postgres18
    hostname: nextcloud-postgres18
    image: postgres:18-alpine
    restart: always
    volumes:
      - /data/nextcloud-postgresql18-data64:/var/lib/postgresql
    environment:
      - POSTGRES_PASSWORD=
      - POSTGRES_DB=nextcloud
      - POSTGRES_USER=nextcloud

Prepare new directory for PostgreSQL 18 data:

mkdir /data/nextcloud-postgresql18-data64
chown postgres: /data/nextcloud-postgresql18-data64/

Stop and remove current containers:

docker compose -f /root/docker-compose-nextcloud.yml stop
docker compose -f /root/docker-compose-nextcloud.yml rm

Start only containers with old PostgreSQL 17 and new PostgreSQL 18

docker compose -f /root/docker-compose-nextcloud.yml up --build nextcloud-postgres -d
docker compose -f /root/docker-compose-nextcloud.yml up --build nextcloud-postgres18 -d

Dump old database content directly to new database using pipe:

docker exec -it nextcloud-postgres17 pg_dumpall -U nextcloud | docker exec -i nextcloud-postgres18 psql -U nextcloud

Stop services (both old and new database):

docker compose -f /root/docker-compose-nextcloud.yml stop
docker compose -f /root/docker-compose-nextcloud.yml rm

Remove old PostgreSQL container defintion from YAML docker-compose file, change service name from "nextcloud-postgres18" to "nextcloud-postgres".

Start all services again:

docker compose -f /root/docker-compose-nextcloud.yml up -d --remove-orphans