62 lines
1.6 KiB
Bash
Executable File
62 lines
1.6 KiB
Bash
Executable File
#!/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
|