https://www.windmill.dev/docs/advanced/self_host#update
Here are simple one-liners for backing up and restoring your Windmill PostgreSQL database:
Backup:
# Stop Windmill services (keep DB running)
docker compose stop windmill_server windmill_worker windmill_worker_native
# Backup (stash filename for restore)
BACKUP_FILE="windmill_backup_$(date +%Y%m%d_%H%M%S).dump"
docker compose exec -T db pg_dump -U postgres -Fc windmill > "$BACKUP_FILE"
# Restart Windmill services (or down all if DB upgrade)
docker compose start windmill_server windmill_worker windmill_worker_nativedocker compose down
docker volume rm windmill_db_data
docker volume rm windmill_windmill_index
docker volume rm windmill_worker_logs
docker volume rm windmill_worker_dependency_cache
docker compose up -d
Restore (compressed):
# ⚠️ For restore, ensure the database is running but Windmill services are stopped to avoid conflicts:
docker compose stop windmill_server windmill_worker windmill_worker_native
# use name like windmill_backup_20260121_112000.dump
docker compose exec -T db pg_restore -U postgres -d windmill --clean < windmill_backup.dump
# IMPORTANT, RESTART WORKERS TO RECONNECT:
docker compose start windmill_server windmill_worker windmill_worker_native# check DB size:
docker compose exec -T db psql -U postgres -d windmill -c \
"SELECT pg_size_pretty(pg_database_size(current_database())) AS db_size;"
# down the servers, take a backup (ABOVE)
# dump...
# take all of them down:
docker compose down
# Remove the old data volume (backup already saved above)
docker volume rm $(docker volume ls -q | grep db_data)
# UPDATE !!! compose.yaml: change `image: postgres:16` to `postgres:17`
# Then bring up only the new DB
docker compose up -d db
# Wait for healthy, then restore
docker compose exec -T db psql -U postgres -c "CREATE ROLE windmill_user NOLOGIN;"
docker compose exec -T db psql -U postgres -c "CREATE ROLE windmill_admin NOLOGIN;"
docker compose exec -T db pg_restore -U postgres -d windmill --no-owner --clean --if-exists < "$BACKUP_FILE"
# Bring up the rest
docker compose up -d