diff --git a/scripts/db/ensure_indexes.sh b/scripts/db/ensure_indexes.sh new file mode 100755 index 0000000..ab586eb --- /dev/null +++ b/scripts/db/ensure_indexes.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash +set -euo pipefail + +CONTAINER="db" +DB_USER="postgres" +DB_NAME="postgres" + +if ! docker inspect --format='{{.State.Running}}' "$CONTAINER" 2>/dev/null | grep -q true; then + echo "ERROR: container '$CONTAINER' is not running" >&2 + exit 1 +fi + +echo "Ensuring indexes on '$DB_NAME' in container '$CONTAINER'..." + +docker exec -i "$CONTAINER" psql -U "$DB_USER" -d "$DB_NAME" <<'SQL' +\set ON_ERROR_STOP on + +CREATE INDEX IF NOT EXISTS idx_gateways_mac ON gateways(mac); +CREATE INDEX IF NOT EXISTS idx_tracker_zones_tracker ON tracker_zones(tracker); +CREATE INDEX IF NOT EXISTS idx_tracks_gateway ON tracks(gateway); +CREATE INDEX IF NOT EXISTS idx_tracks_tracker ON tracks(tracker); +CREATE INDEX IF NOT EXISTS idx_tracks_uuid_ts ON tracks(uuid, timestamp); +CREATE INDEX IF NOT EXISTS idx_tracks_tracker_ts ON tracks(tracker, timestamp); + +\echo 'Done.' +SQL