minor
This commit is contained in:
61
db/build.sh
Executable file
61
db/build.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user