To upgrade postgresql --------------------- # example below uses vaultwarden as the app with db user "vaultwarden" and db name "vaultwarden" # all commands are executed from docker shell, unless stated otherwise # stop vaultwarden cd /opt/stacks/vaultwarden docker compose down # start postgresql cd /opt/stacks/vaultwarden docker compose up -d postgresql # dump database cd /opt/stacks/vaultwarden mkdir /mnt/data/vaultwarden/pgbackups/$(date -I) docker exec vaultwarden-postgresql-1 pg_dumpall -U vaultwarden > /mnt/data/vaultwarden/pgbackups/$(date -I)/vaultwarden-backup.sql chown -R postgres:postgres /mnt/data/vaultwarden/pgbackups/$(date -I) chmod -R 700 /mnt/data/vaultwarden/pgbackups/$(date -I) # stop postgresql cd /opt/stacks/vaultwarden docker compose down postgresql # rename pgdata (we don't delete yet; in order to have a rollback option) # in Truenas shell, enter zfs rename SSD1/docker/data/vaultwarden/pgdata SSD1/docker/data/vaultwarden/pgdata-old # create new pgdata dataset # in Truenas shell, enter zfs create SSD1/docker/data/vaultwarden/pgdata chown -R postgres:postgres /mnt/SSD1/docker/data/vaultwarden/pgdata chmod 700 /mnt/SSD1/docker/data/vaultwarden/pgdata # edit the vaultwarden compose.yml file to the new version of the postgresql image # -- snip -- postgresql: image: postgres:17-alpine # -- snip -- # pull image docker compose pull # start new postgresql container docker compose up -d postgresql # import database dump cat /mnt/data/vaultwarden/pgbackups/$(date -I)/vaultwarden-backup.sql | docker exec -i vaultwarden-postgresql-1 psql -U vaultwarden # stop postgresql cd /opt/stacks/vaultwarden docker compose down postgresql # start stack cd /opt/stacks/vaultwarden docker compose up -d # Check if all is ok # Log into vaultwarden as check if all looks ok # If ok, delete the pgdata-old dataset using Truenas GUI, or later (after confidence is high enough)