#!/usr/bin/env bash # Einmalige Migration: SQLite (/data/essens.db, Volume essens_data) -> PostgreSQL (postgresql.lan/essens) # Läuft auf docker1 im Stack-Verzeichnis. Erwartet: .env.local enthält DATABASE_URL="postgresql://essens:@postgresql.lan:5432/essens?..." set -euo pipefail cd "$(dirname "$0")/.." DB_URL=$(grep -m1 '^DATABASE_URL=' .env.local | sed 's/^DATABASE_URL=//; s/^"//; s/"$//') PG_USER=$(sed -n 's|.*://\([^:@]*\):.*|\1|p' <<<"$DB_URL") PG_PASS=$(sed -n 's|.*://[^:@]*:\([^@]*\)@.*|\1|p' <<<"$DB_URL") PG_HOST=$(sed -n 's|.*@\([^:/?]*\).*|\1|p' <<<"$DB_URL") PG_DB=$(sed -n 's|.*:/\([^?]*\).*|\1|p' <<<"$DB_URL") export PGPASSWORD="$PG_PASS" echo "== 1) SQLite-Export (CSV) aus dem laufenden Container" TMP=$(mktemp -d) trap 'rm -rf "$TMP"' EXIT docker exec svc-essensplanung sh -c 'sqlite3 -cmd ".nullvalue NULL" -csv /data/essens.db "SELECT * FROM essens_user;"' > "$TMP/essens_user.csv" docker exec svc-essensplanung sh -c 'sqlite3 -cmd ".nullvalue NULL" -csv /data/essens.db "SELECT * FROM essens_mahlzeiten;"' > "$TMP/essens_mahlzeiten.csv" echo " essens_user: $(wc -l < "$TMP/essens_user.csv") Zeilen" echo " essens_mahlzeiten: $(wc -l < "$TMP/essens_mahlzeiten.csv") Zeilen" echo "== 2) Schema-Migrations auf PostgreSQL" docker compose run --rm --no-deps app bin/console doctrine:migrations:migrate --no-interaction echo "== 3) Datenimport via COPY" psql -h "$PG_HOST" -U "$PG_USER" -d "$PG_DB" <