Download ASP/setup_postgres.sh from mahendra0120/Agentic_Serial-killer_Profiler: direct link, hf CLI and curl.
- Browser
- Download file 3.08 kB
-
https://huggingface.co/mahendra0120/Agentic_Serial-killer_Profiler/resolve/refs%2Fpr%2F1/ASP/setup_postgres.sh
- Command line
-
hf download hf://mahendra0120/Agentic_Serial-killer_Profiler@refs/pr/1/ASP/setup_postgres.sh
-
curl -L -o setup_postgres.sh https://huggingface.co/mahendra0120/Agentic_Serial-killer_Profiler/resolve/refs%2Fpr%2F1/ASP/setup_postgres.sh
3.08 kB
| set -euo pipefail | |
| PG_USER="asp_user" | |
| PG_PASSWORD="asp_password" | |
| PG_DB="asp" | |
| BACKUP_DIR="/workspace/pg-backups" | |
| BACKUP_FILE="${BACKUP_DIR}/latest.dump" | |
| BACKUP_INTERVAL_SECONDS="${BACKUP_INTERVAL_SECONDS:-300}" | |
| if [ "$(id -u)" -eq 0 ]; then | |
| PGRUN="runuser -u postgres --" | |
| else | |
| PGRUN="sudo -u postgres" | |
| fi | |
| if [ ! -d /workspace ]; then | |
| echo "!! /workspace not found. This script expects a RunPod network volume" | |
| echo "mounted at /workspace. Aborting." | |
| exit 1 | |
| fi | |
| mkdir -p "$BACKUP_DIR" | |
| if ! command -v psql >/dev/null 2>&1; then | |
| echo "Installing PostgreSQL" | |
| apt-get update -y | |
| apt-get install -y postgresql | |
| fi | |
| PG_VERSION="$(ls /etc/postgresql | sort -V | tail -n1)" | |
| PG_CLUSTER="main" | |
| NATIVE_DATA_DIR="/var/lib/postgresql/${PG_VERSION}/${PG_CLUSTER}" | |
| echo "Found PostgreSQL ${PG_VERSION}, cluster '${PG_CLUSTER}'" | |
| NEEDS_REPAIR=false | |
| if [ -L "$NATIVE_DATA_DIR" ]; then | |
| NEEDS_REPAIR=true | |
| elif [ -d "$NATIVE_DATA_DIR" ] && [ "$(stat -c %U "$NATIVE_DATA_DIR" 2>/dev/null)" != "postgres" ]; then | |
| NEEDS_REPAIR=true | |
| fi | |
| if [ "$NEEDS_REPAIR" = true ]; then | |
| echo "Found a broken/root-owned data directory" | |
| echo "recreating the local cluster from scratch" | |
| pg_dropcluster --stop "${PG_VERSION}" "${PG_CLUSTER}" 2>/dev/null || true | |
| rm -rf "$NATIVE_DATA_DIR" | |
| rm -rf "/etc/postgresql/${PG_VERSION}/${PG_CLUSTER}" | |
| pg_createcluster "${PG_VERSION}" "${PG_CLUSTER}" | |
| fi | |
| echo "Starting PostgreSQL..." | |
| service postgresql start || pg_ctlcluster "${PG_VERSION}" "${PG_CLUSTER}" start | |
| for i in $(seq 1 30); do | |
| if ${PGRUN} pg_isready -q; then break; fi | |
| sleep 1 | |
| done | |
| FRESH_CLUSTER=false | |
| ROLE_EXISTS="$(${PGRUN} psql -tAc "SELECT 1 FROM pg_roles WHERE rolname='${PG_USER}'")" | |
| if [ "$ROLE_EXISTS" != "1" ]; then | |
| echo "Creating role '${PG_USER}' and database '${PG_DB}'." | |
| ${PGRUN} psql -c "CREATE ROLE ${PG_USER} LOGIN PASSWORD '${PG_PASSWORD}';" | |
| ${PGRUN} createdb -O "${PG_USER}" "${PG_DB}" | |
| FRESH_CLUSTER=true | |
| else | |
| echo "Role '${PG_USER}' already exists; Skipping creation" | |
| fi | |
| if [ "$FRESH_CLUSTER" = true ] && [ -f "$BACKUP_FILE" ]; then | |
| echo "Found existing backup at ${BACKUP_FILE} — restoring" | |
| ${PGRUN} pg_restore -d "${PG_DB}" --clean --if-exists "$BACKUP_FILE" \ | |
| && echo " Restore complete." \ | |
| || echo "!! Restore reported errors. Check output above." | |
| else | |
| echo "No restore needed (either not a fresh cluster, or no backup found yet)." | |
| fi | |
| if ! pgrep -f "pg_dump.*${PG_DB}.*autobackup-loop" >/dev/null 2>&1; then | |
| echo "Starting background auto-backup loop (every ${BACKUP_INTERVAL_SECONDS}s)..." | |
| nohup bash -c " | |
| # marker string 'autobackup-loop' below is just so pgrep can find this loop | |
| while true; do | |
| sleep ${BACKUP_INTERVAL_SECONDS} | |
| ${PGRUN} pg_dump -Fc '${PG_DB}' -f '${BACKUP_FILE}.tmp' \ | |
| && mv '${BACKUP_FILE}.tmp' '${BACKUP_FILE}' # autobackup-loop | |
| done | |
| " > "${BACKUP_DIR}/autobackup.log" 2>&1 & | |
| disown | |
| fi | |
| echo "" | |
| echo "To take a manual backup right now, run: bash backup_postgres.sh" | |