fix(handlers): add handlers
This commit is contained in:
89
scripts/db/rebuild_iam_db.sh
Executable file
89
scripts/db/rebuild_iam_db.sh
Executable file
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd "${SCRIPT_DIR}/../.." && pwd)"
|
||||
|
||||
load_database_url_from_env_file() {
|
||||
local env_file="$1"
|
||||
local line value
|
||||
while IFS= read -r line || [[ -n "${line}" ]]; do
|
||||
line="${line#"${line%%[![:space:]]*}"}"
|
||||
[[ -z "${line}" || "${line}" == \#* ]] && continue
|
||||
line="${line#export }"
|
||||
if [[ "${line}" == DATABASE_URL=* ]]; then
|
||||
value="${line#DATABASE_URL=}"
|
||||
value="${value%$'\r'}"
|
||||
value="${value%\"}"
|
||||
value="${value#\"}"
|
||||
value="${value%\'}"
|
||||
value="${value#\'}"
|
||||
printf '%s' "${value}"
|
||||
return 0
|
||||
fi
|
||||
done < "${env_file}"
|
||||
return 1
|
||||
}
|
||||
|
||||
DATABASE_URL="${DATABASE_URL:-}"
|
||||
if [[ -z "${DATABASE_URL}" && -f "${ROOT_DIR}/.env" ]]; then
|
||||
DATABASE_URL="$(load_database_url_from_env_file "${ROOT_DIR}/.env" || true)"
|
||||
fi
|
||||
if [[ -z "${DATABASE_URL}" ]]; then
|
||||
echo "DATABASE_URL is required (export it, or set it in ${ROOT_DIR}/.env)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v psql >/dev/null 2>&1; then
|
||||
echo "psql not found in PATH"
|
||||
if [[ -r /etc/os-release ]]; then
|
||||
. /etc/os-release
|
||||
case "${ID:-}" in
|
||||
ubuntu|debian)
|
||||
echo "Install (Ubuntu/Debian): sudo apt-get update && sudo apt-get install -y postgresql-client"
|
||||
;;
|
||||
centos|rhel|fedora)
|
||||
echo "Install (RHEL/CentOS/Fedora): sudo dnf install -y postgresql"
|
||||
;;
|
||||
alpine)
|
||||
echo "Install (Alpine): sudo apk add postgresql-client"
|
||||
;;
|
||||
*)
|
||||
echo "Install PostgreSQL client tools (psql) for your OS and retry"
|
||||
;;
|
||||
esac
|
||||
else
|
||||
echo "Install PostgreSQL client tools (psql) for your OS and retry"
|
||||
fi
|
||||
exit 127
|
||||
fi
|
||||
|
||||
CHECK_ONLY="${CHECK_ONLY:-0}"
|
||||
if [[ "${CHECK_ONLY}" == "1" ]]; then
|
||||
echo "DATABASE_URL=${DATABASE_URL}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
BACKUP="${BACKUP:-0}"
|
||||
BACKUP_DIR="${BACKUP_DIR:-${ROOT_DIR}/backups}"
|
||||
if [[ "${BACKUP_DIR}" != /* ]]; then
|
||||
BACKUP_DIR="${ROOT_DIR}/${BACKUP_DIR}"
|
||||
fi
|
||||
|
||||
if [[ "${BACKUP}" == "1" ]]; then
|
||||
if ! command -v pg_dump >/dev/null 2>&1; then
|
||||
echo "pg_dump not found; install postgres client or set BACKUP=0"
|
||||
exit 1
|
||||
fi
|
||||
mkdir -p "${BACKUP_DIR}"
|
||||
ts="$(date +%Y%m%d_%H%M%S)"
|
||||
backup_file="${BACKUP_DIR}/iam_service_db_${ts}.dump"
|
||||
pg_dump "${DATABASE_URL}" -Fc -f "${backup_file}"
|
||||
echo "Backup written: ${backup_file}"
|
||||
fi
|
||||
|
||||
psql "${DATABASE_URL}" -v ON_ERROR_STOP=1 -f "${ROOT_DIR}/sql/drop_iam_schema.sql"
|
||||
psql "${DATABASE_URL}" -v ON_ERROR_STOP=1 -f "${ROOT_DIR}/sql/schema_post_init.sql"
|
||||
psql "${DATABASE_URL}" -v ON_ERROR_STOP=1 -f "${ROOT_DIR}/sql/verify_iam_schema.sql"
|
||||
|
||||
echo "Rebuild completed"
|
||||
Reference in New Issue
Block a user