fb19795fdb
For moving this project to a new server: git tracks code, not the Postgres data directory, and raw volume/data-dir copying is fragile across Postgres versions or architectures (this repo already hit a collation-version mismatch once from just changing the Postgres image). pg_dump/pg_restore is the portable way to move the actual data instead. scripts/backup-db.sh dumps the running postgres container's database in pg_dump's custom format into ./backups/ (gitignored — dumps contain real user data and don't belong in git history). It reads POSTGRES_USER/POSTGRES_DB from the container's own environment rather than re-parsing .env, so it can't drift out of sync with the actual running config. scripts/restore-db.sh restores a dump into the running container (--clean --if-exists --single-transaction, so a failure rolls back atomically instead of leaving a half-restored database), with a confirmation prompt since it's destructive, skippable via -y. Added .gitattributes forcing LF on *.sh — Windows git would otherwise check these out as CRLF, breaking the bash shebang on the Linux server they're meant to run on. Verified end to end: took a real backup of the live database, restored it back over itself, and confirmed exact row-count matches across every table plus that pgvector similarity search still works on the restored embeddings (not just that the bytes round-tripped). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
20 lines
604 B
Bash
20 lines
604 B
Bash
#!/usr/bin/env bash
|
|
# Dumps the Postgres database from the running "postgres" container into ./backups/,
|
|
# in pg_dump's custom format (compressed, restorable with pg_restore — see restore-db.sh).
|
|
#
|
|
# Usage: scripts/backup-db.sh
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
mkdir -p backups
|
|
timestamp="$(date +%Y%m%d_%H%M%S)"
|
|
out="backups/dnd_backup_${timestamp}.dump"
|
|
trap 'rm -f "${out}"' ERR
|
|
|
|
echo "Dumping database into ${out} ..."
|
|
docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" -F c' > "${out}"
|
|
|
|
size="$(du -h "${out}" | cut -f1)"
|
|
echo "Done: ${out} (${size})"
|