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

Published on Author admin

Stop and remove current Nextcloud docker services:

docker stop nextcloud-app
docker stop nextcloud-www
docker stop nextcloud-postgres
docker stop nextcloud-redis

docker rm nextcloud-app
docker rm nextcloud-www
docker rm nextcloud-postgres
docker rm nextcloud-redis

Run only old PostgreSQL database container using "docker compose --build"

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

Dump old PostgreSQL database content to SQL file:

docker exec -it nextcloud-postgres pg_dumpall -U nextcloud > /data/nextcloud-postgres-2024-10-18.sql

Stop old PostgreSQL docker database:

docker stop nextcloud-postgres

Create directory for new database content:

mkdir /data/nextcloud-postgresql17-data64

Change docker compose YAML file, change database version from 16 to 17 and point new directory for database content

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

Run only database container (version 17) using "docker compose --build"

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

Import SQL file to new database

docker exec -i nextcloud-postgres psql -U nextcloud < /data/nextcloud-postgres-2024-10-18.sql

Start all Nextcloud docker services

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