param( [Parameter(Mandatory=$true)] [string]$DumpFile, [string]$DockerBin = "C:\Program Files\Docker\Docker\resources\bin", [string]$DbContainer = "aufmass_web-db-1", [string]$WebContainer = "aufmass_web-web-1", [string]$DbUser = "aufmass", [string]$DbName = "aufmassweb" ) Write-Host "=== AufmaßWeb – Datenimport (Docker PostgreSQL) ===" -ForegroundColor Cyan Write-Host "Dump: $DumpFile" Write-Host "Ziel: Container $DbContainer, DB $DbName" Write-Host "" if (-not (Test-Path $DumpFile)) { Write-Error "Dump-Datei nicht gefunden: $DumpFile" exit 1 } $dockerd = Join-Path $DockerBin "docker.exe" if (-not (Test-Path $dockerd)) { Write-Error "Docker nicht gefunden unter: $dockerd" exit 1 } # 1. Prüfen ob Container läuft Write-Host "[1/5] Prüfe Docker-Container ..." -NoNewline $running = & $dockerd ps --filter "name=$DbContainer" --filter "status=running" --format "{{.Names}}" 2>$null if (-not $running) { Write-Host " FEHLER" -ForegroundColor Red Write-Error "Container $DbContainer läuft nicht. Starte zuerst 'docker compose up -d'" exit 1 } Write-Host " OK ($running)" -ForegroundColor Green # 2. Dump in Container kopieren Write-Host "[2/5] Kopiere Dump in Container ..." -NoNewline $remotePath = "/tmp/$(Split-Path $DumpFile -Leaf)" & $dockerd cp $DumpFile "${DbContainer}:${remotePath}" Write-Host " OK → $remotePath" -ForegroundColor Green # 3. Datenbank droppen + neu anlegen (verbinde mit 'postgres' DB, nicht mit der Zieldatenbank) Write-Host "[3/5] Lösche alte Datenbank ..." -NoNewline & $dockerd exec -i $DbContainer psql -U $DbUser -d postgres -c "DROP DATABASE IF EXISTS \"$DbName\";" 2>$null Write-Host " OK" -ForegroundColor Green Write-Host "[4/5] Erstelle neue Datenbank ..." -NoNewline & $dockerd exec -i $DbContainer psql -U $DbUser -d postgres -c "CREATE DATABASE \"$DbName\";" 2>$null Write-Host " OK" -ForegroundColor Green # 4. Restore Write-Host "[5/5] Stelle Daten aus Dump wieder her ..." -ForegroundColor Yellow & $dockerd exec -i $DbContainer pg_restore -U $DbUser -d $DbName --verbose --exit-on-error $remotePath if ($LASTEXITCODE -ne 0) { Write-Error "pg_restore fehlgeschlagen (Exit-Code: $LASTEXITCODE)" exit 1 } Write-Host "Datenbank-Restore erfolgreich!" -ForegroundColor Green # 5. Web-Container neuladen Write-Host "Starte Web-Container neu ..." -NoNewline & $dockerd restart $WebContainer 2>$null Write-Host " OK" -ForegroundColor Green # Aufräumen & $dockerd exec $DbContainer rm -f $remotePath 2>$null $size = (Get-Item $DumpFile).Length / 1MB Write-Host "" Write-Host "=== Fertig! ===" -ForegroundColor Cyan Write-Host "Dump: $DumpFile ({0:N1} MB)" -f $size Write-Host "App: http://localhost:5000" -ForegroundColor Green Write-Host "" Write-Host "Tipp: Du kannst den Dump archivieren oder löschen." -ForegroundColor Gray