Add db:backup and db:restore npm scripts

This commit is contained in:
Bonna Moon
2026-06-15 21:45:09 -05:00
parent 4bc5ddc77b
commit 9ec4457552
4 changed files with 65 additions and 1 deletions

24
scripts/db-backup.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/sh
# Usage: ./scripts/db-backup.sh [output-file]
# Uses DATABASE_URL from environment (or .env if present).
# Example — local: DATABASE_URL="postgresql://bonnamoon@localhost:5432/moonbase_dev" ./scripts/db-backup.sh
# Example — remote: ssh into NAS and run via docker exec (see README)
set -e
# Load .env if present and DATABASE_URL not already set
if [ -z "$DATABASE_URL" ] && [ -f ".env" ]; then
export $(grep -v '^#' .env | grep DATABASE_URL | xargs)
fi
if [ -z "$DATABASE_URL" ]; then
echo "Error: DATABASE_URL is not set."
exit 1
fi
OUTFILE="${1:-backups/moonbase-$(date +%Y%m%d-%H%M%S).sql}"
mkdir -p "$(dirname "$OUTFILE")"
echo "Backing up to $OUTFILE ..."
pg_dump "$DATABASE_URL" --no-owner --no-privileges -f "$OUTFILE"
echo "Done. $(du -sh "$OUTFILE" | cut -f1) written to $OUTFILE"

35
scripts/db-restore.sh Executable file
View File

@@ -0,0 +1,35 @@
#!/bin/sh
# Usage: ./scripts/db-restore.sh <backup-file>
# Uses DATABASE_URL from environment (or .env if present).
# WARNING: drops and recreates the public schema — all existing data is replaced.
set -e
if [ -z "$1" ]; then
echo "Usage: $0 <backup-file.sql>"
exit 1
fi
INFILE="$1"
if [ ! -f "$INFILE" ]; then
echo "Error: file not found: $INFILE"
exit 1
fi
# Load .env if present and DATABASE_URL not already set
if [ -z "$DATABASE_URL" ] && [ -f ".env" ]; then
export $(grep -v '^#' .env | grep DATABASE_URL | xargs)
fi
if [ -z "$DATABASE_URL" ]; then
echo "Error: DATABASE_URL is not set."
exit 1
fi
echo "Restoring from $INFILE ..."
echo " -> dropping and recreating public schema..."
psql "$DATABASE_URL" -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"
echo " -> loading backup..."
psql "$DATABASE_URL" -f "$INFILE" -q
echo "Done."