#!/usr/bin/env bash set -Eeuo pipefail IFS=$'\n\t' # Apply infra/schema.sql to the configured Postgres log() { printf '%s\n' "$*"; } log_err() { printf 'ERR: %s\n' "$*" >&2; } usage() { cat <<'USG' Usage: db_apply.sh [--dry-run] [--schema PATH] Env: DATABASE_URL or PGHOST/PGPORT/PGDATABASE/PGUSER/PGPASSWORD USG } DRY=0 SCHEMA="$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd -P)/infra/schema.sql" while [[ $# -gt 0 ]]; do case "$1" in --dry-run) DRY=1; shift ;; --schema) SCHEMA="${2:-}"; shift 2 ;; -h|--help) usage; exit 0 ;; *) log_err "Unknown arg: $1"; usage; exit 2 ;; esac done [[ -f "$SCHEMA" ]] || { log_err "Schema not found: $SCHEMA"; exit 1; } command -v psql >/dev/null 2>&1 || { log_err "psql not found in PATH"; exit 127; } if [[ ${DRY} -eq 1 ]]; then log "[DRY] Would apply schema: $SCHEMA" exit 0 fi if [[ -n "${DATABASE_URL:-}" ]]; then PSQL_ARGS=("$DATABASE_URL") else : "${PGHOST:?PGHOST required or set DATABASE_URL}" : "${PGDATABASE:?PGDATABASE required or set DATABASE_URL}" PSQL_ARGS=("host=$PGHOST" "port=${PGPORT:-5432}" "dbname=$PGDATABASE" "user=${PGUSER:-postgres}") fi log "Applying schema to database..." psql "${PSQL_ARGS[@]}" -f "$SCHEMA" log "Schema applied."