#!/bin/sh set -eu if [ -z "${PG_BACKUP_DSN:-}" ]; then echo "PG_BACKUP_DSN is required (managed PostgreSQL TLS DSN, supplied via secure environment)." >&2 exit 64 fi case "$PG_BACKUP_DSN" in *sslmode=verify-full*sslrootcert=*) ;; *) echo "PG_BACKUP_DSN must enforce sslmode=verify-full and sslrootcert." >&2; exit 64 ;; esac output_dir=${1:-/opt/han-chat/backups} umask 077 mkdir -p "$output_dir" stamp=$(date -u +%Y%m%dT%H%M%SZ) archive="$output_dir/han-chat-$stamp.dump" pg_dump --dbname="$PG_BACKUP_DSN" --format=custom --no-owner --no-privileges --file="$archive" pg_restore --list "$archive" >/dev/null sha256sum "$archive" > "$archive.sha256" chmod 600 "$archive" "$archive.sha256" echo "Logical backup verified: $archive" echo "This supplements, but does not replace, provider backup/PITR and restore rehearsal."