#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DEFAULT_DB_NAME="building_catalog" if [[ -n "${DATABASE_URL:-}" ]]; then URL_WITHOUT_QUERY="${DATABASE_URL%%\?*}" URL_QUERY="" if [[ "$DATABASE_URL" == *\?* ]]; then URL_QUERY="?${DATABASE_URL#*\?}" fi URL_PATH_PART="${URL_WITHOUT_QUERY#*://}" URL_DB_NAME="" URL_PREFIX="$URL_WITHOUT_QUERY" if [[ "$URL_PATH_PART" == */* ]]; then URL_DB_NAME="${URL_PATH_PART#*/}" URL_DB_NAME="${URL_DB_NAME%%/*}" URL_PREFIX="${URL_WITHOUT_QUERY%/*}" fi TARGET_DB="${PGDATABASE:-${URL_DB_NAME:-$DEFAULT_DB_NAME}}" PSQL_MAINT_CMD=(psql "${URL_PREFIX}/postgres${URL_QUERY}" -v ON_ERROR_STOP=1) PSQL_CMD=(psql "${URL_PREFIX}/${TARGET_DB}${URL_QUERY}" -v ON_ERROR_STOP=1) else TARGET_DB="${PGDATABASE:-$DEFAULT_DB_NAME}" PSQL_MAINT_CMD=( psql -h "${PGHOST:-127.0.0.1}" -p "${PGPORT:-5432}" -U "${PGUSER:-postgres}" -d postgres -v ON_ERROR_STOP=1 ) PSQL_CMD=( psql -h "${PGHOST:-127.0.0.1}" -p "${PGPORT:-5432}" -U "${PGUSER:-postgres}" -d "$TARGET_DB" -v ON_ERROR_STOP=1 ) fi if [[ ! "$TARGET_DB" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then printf 'Unsupported database name: %s\n' "$TARGET_DB" >&2 exit 1 fi DB_EXISTS="$("${PSQL_MAINT_CMD[@]}" -Atc "SELECT 1 FROM pg_database WHERE datname = '$TARGET_DB'")" if [[ "$DB_EXISTS" != "1" ]]; then printf 'Creating database: %s\n' "$TARGET_DB" "${PSQL_MAINT_CMD[@]}" -c "CREATE DATABASE \"$TARGET_DB\"" fi for sql_file in "$ROOT_DIR"/*.sql; do if [[ -f "$sql_file" ]]; then "${PSQL_CMD[@]}" -f "$sql_file" fi done