Skip to content

Instantly share code, notes, and snippets.

@jimangel
Created March 5, 2026 20:45
Show Gist options
  • Select an option

  • Save jimangel/ce60442bf72633e1688d16e86697b1ab to your computer and use it in GitHub Desktop.

Select an option

Save jimangel/ce60442bf72633e1688d16e86697b1ab to your computer and use it in GitHub Desktop.
db dump

https://www.windmill.dev/docs/advanced/self_host#update


Here are simple one-liners for backing up and restoring your Windmill PostgreSQL database:

Backup & Restore

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_native

HARD RESET (DELETES DATA)

docker 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

Extra

# 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;"

DB restore

# 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment