- next dev/start binden jetzt explizit an 0.0.0.0 statt nur localhost (Docker war über die Port-Freigabe bereits erreichbar, jetzt auch beim nativen npm-Betrieb); docker-compose.yml macht das Binden an alle Interfaces zusätzlich explizit - package.json-Name, Docker-Image/Container/Netzwerk-Namen, lokaler DB-Name (canteen_menu), Browser-Tab-Titel und README auf den englischen Projektnamen "canteen-menu" umgestellt; deutsche In-App-Texte für die Kantinen-Mitarbeiter bleiben unverändert - Supabase-Projekt (Anzeigename) und native lokale Postgres-DB entsprechend umbenannt (Ref/URL/Keys unverändert)
48 lines
2.1 KiB
PowerShell
48 lines
2.1 KiB
PowerShell
# Synchronisiert die lokale PostgreSQL-Kopie mit der Supabase-Datenbank.
|
|
# Voraussetzungen:
|
|
# - PostgreSQL 17 lokal installiert (Standardpfad, Dienst läuft)
|
|
# - Umgebungsvariablen:
|
|
# SUPABASE_DB_PASSWORD = Datenbank-Passwort des Supabase-Projekts
|
|
# LOCAL_PG_PASSWORD = Passwort des lokalen postgres-Benutzers
|
|
# Aufruf: powershell -File scripts\sync-local-db.ps1
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$PgBin = "C:\Program Files\PostgreSQL\17\bin"
|
|
$RemoteHost = "aws-0-eu-central-1.pooler.supabase.com"
|
|
$RemoteUser = "postgres.hvzikwjoyhoakedlywhj"
|
|
$LocalDir = Join-Path $PSScriptRoot "..\supabase\local"
|
|
|
|
if (-not $env:SUPABASE_DB_PASSWORD) { throw "SUPABASE_DB_PASSWORD ist nicht gesetzt." }
|
|
if (-not $env:LOCAL_PG_PASSWORD) { throw "LOCAL_PG_PASSWORD ist nicht gesetzt." }
|
|
|
|
# 1. Aktuellen Stand aus Supabase ziehen (Session-Pooler, Port 5432)
|
|
$env:PGPASSWORD = $env:SUPABASE_DB_PASSWORD
|
|
$SchemaFile = Join-Path $LocalDir "10_schema.sql"
|
|
& "$PgBin\pg_dump" -h $RemoteHost -p 5432 -U $RemoteUser -d postgres `
|
|
--schema=public --schema-only --no-owner --no-privileges `
|
|
-f $SchemaFile
|
|
& "$PgBin\pg_dump" -h $RemoteHost -p 5432 -U $RemoteUser -d postgres `
|
|
--schema=public --data-only --no-owner --disable-triggers `
|
|
-f (Join-Path $LocalDir "20_data.sql")
|
|
|
|
# pg_dump legt "CREATE SCHEMA public;" und \restrict/\unrestrict-Marker an.
|
|
# Das offizielle postgres-Docker-Image besitzt "public" bereits und bricht
|
|
# mit ON_ERROR_STOP=1 sonst das komplette Init-Skript ab.
|
|
(Get-Content $SchemaFile) `
|
|
-replace '^CREATE SCHEMA public;$', 'CREATE SCHEMA IF NOT EXISTS public;' `
|
|
-replace '^\\restrict .*$', '' `
|
|
-replace '^\\unrestrict .*$', '' |
|
|
Set-Content $SchemaFile
|
|
|
|
# 2. Lokale Datenbank neu aufbauen
|
|
$env:PGPASSWORD = $env:LOCAL_PG_PASSWORD
|
|
& "$PgBin\psql" -h localhost -U postgres -c "drop database if exists canteen_menu;"
|
|
& "$PgBin\psql" -h localhost -U postgres -c "create database canteen_menu;"
|
|
|
|
foreach ($file in @("00_stubs.sql", "10_schema.sql", "15_auth_users.sql", "20_data.sql")) {
|
|
& "$PgBin\psql" -h localhost -U postgres -d canteen_menu -q -f (Join-Path $LocalDir $file)
|
|
}
|
|
|
|
Write-Host "Lokale Datenbank 'canteen_menu' wurde aktualisiert."
|