#!/usr/bin/env bash
set -euo pipefail
CONTAINER_NAME="rivet-engine-postgres"
if [ $# -ne 1 ]; then
echo "Usage: $0 <backup-path>"
echo "Example: $0 /path/to/backup/postgres-backup.tar.gz"
exit 1
fi
BACKUP_PATH="$1"
if ! docker ps --all --format '{{.Names}}' | grep -qw "${CONTAINER_NAME}"; then
echo "error: container '${CONTAINER_NAME}' not found"
exit 1
fi
VOLUME_NAME=$(docker inspect "${CONTAINER_NAME}" --format '{{range .Mounts}}{{if eq .Destination "/var/lib/postgresql/data"}}{{.Name}}{{end}}{{end}}')
if [ -z "${VOLUME_NAME}" ]; then
echo "error: could not find postgres data volume for container '${CONTAINER_NAME}'"
exit 1
fi
echo "Backing up postgres data from volume '${VOLUME_NAME}'..."
BACKUP_DIR="$(dirname "${BACKUP_PATH}")"
mkdir -p "${BACKUP_DIR}"
docker run --rm \
-v "${VOLUME_NAME}":/data \
-v "${BACKUP_DIR}":/backup \
alpine \
tar czf "/backup/$(basename "${BACKUP_PATH}")" -C /data .
echo "Backup completed: ${BACKUP_PATH}"