Files
docker-compose-projects/db/build.sh
2026-02-23 16:40:06 +03:00

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