158 lines
3.1 KiB
Markdown
158 lines
3.1 KiB
Markdown
# PostgreSQL Datenbank Verbindung
|
|
|
|
Du verbindest dich mit der PostgreSQL Datenbank des Projekts.
|
|
|
|
## Automatischer Setup
|
|
|
|
### 1. Betriebssystem erkennen
|
|
|
|
Prüfe zuerst das Betriebssystem:
|
|
|
|
```bash
|
|
uname -s
|
|
```
|
|
|
|
### 2. PostgreSQL CLI installieren (falls nicht vorhanden)
|
|
|
|
**macOS:**
|
|
```bash
|
|
# Prüfen ob psql installiert ist
|
|
which psql || brew install postgresql
|
|
```
|
|
|
|
**Linux (Ubuntu/Debian):**
|
|
```bash
|
|
which psql || sudo apt-get update && sudo apt-get install -y postgresql-client
|
|
```
|
|
|
|
**Linux (Alpine):**
|
|
```bash
|
|
which psql || apk add postgresql-client
|
|
```
|
|
|
|
### 3. Environment Variable lesen
|
|
|
|
Lese die `DATABASE_URL` aus `.env.local` oder `.env`:
|
|
|
|
```bash
|
|
# Aus .env.local
|
|
grep DATABASE_URL .env.local 2>/dev/null || grep DATABASE_URL .env 2>/dev/null
|
|
```
|
|
|
|
Die URL hat das Format:
|
|
```
|
|
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
|
|
```
|
|
|
|
### 4. Mit Datenbank verbinden
|
|
|
|
```bash
|
|
# Direkte Verbindung mit URL
|
|
psql "$DATABASE_URL"
|
|
|
|
# Oder mit Supabase
|
|
psql "postgresql://postgres.[PROJECT-REF]:[PASSWORD]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres"
|
|
```
|
|
|
|
## Häufige Befehle nach Verbindung
|
|
|
|
```sql
|
|
-- Alle Tabellen anzeigen
|
|
\dt
|
|
|
|
-- Tabellen mit Schema
|
|
\dt public.*
|
|
|
|
-- Tabellen-Details
|
|
\d table_name
|
|
|
|
-- Alle Schemas
|
|
\dn
|
|
|
|
-- Benutzer anzeigen
|
|
\du
|
|
|
|
-- Aktuelle Datenbank
|
|
SELECT current_database();
|
|
|
|
-- Tabellen-Größen
|
|
SELECT
|
|
tablename,
|
|
pg_size_pretty(pg_total_relation_size(schemaname || '.' || tablename)) as size
|
|
FROM pg_tables
|
|
WHERE schemaname = 'public'
|
|
ORDER BY pg_total_relation_size(schemaname || '.' || tablename) DESC;
|
|
```
|
|
|
|
## Supabase spezifische Queries
|
|
|
|
```sql
|
|
-- Auth Users (Supabase)
|
|
SELECT id, email, created_at FROM auth.users LIMIT 10;
|
|
|
|
-- Storage Buckets
|
|
SELECT * FROM storage.buckets;
|
|
|
|
-- RLS Policies
|
|
SELECT * FROM pg_policies WHERE schemaname = 'public';
|
|
|
|
-- Enabled Extensions
|
|
SELECT * FROM pg_extension;
|
|
```
|
|
|
|
## SQL Datei ausführen
|
|
|
|
```bash
|
|
# SQL Datei ausführen
|
|
psql "$DATABASE_URL" -f migrations/001_init.sql
|
|
|
|
# Mit Output
|
|
psql "$DATABASE_URL" -f migrations/001_init.sql -v ON_ERROR_STOP=1
|
|
```
|
|
|
|
## Backup & Restore
|
|
|
|
```bash
|
|
# Backup erstellen
|
|
pg_dump "$DATABASE_URL" > backup.sql
|
|
|
|
# Nur Schema
|
|
pg_dump "$DATABASE_URL" --schema-only > schema.sql
|
|
|
|
# Nur Daten
|
|
pg_dump "$DATABASE_URL" --data-only > data.sql
|
|
|
|
# Restore
|
|
psql "$DATABASE_URL" < backup.sql
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Connection refused
|
|
- Supabase Projekt ist pausiert → Dashboard öffnen
|
|
- Firewall blockiert Port 5432/6543
|
|
- IP nicht in Allowlist (Supabase: Database Settings > Connection Pooling)
|
|
|
|
### SSL required
|
|
```bash
|
|
psql "$DATABASE_URL?sslmode=require"
|
|
```
|
|
|
|
### Password authentication failed
|
|
- Passwort in URL URL-encoded? (`@` → `%40`, etc.)
|
|
- Richtiges Passwort aus Supabase Dashboard
|
|
|
|
---
|
|
|
|
## Automatische Verbindung
|
|
|
|
Führe diese Schritte aus:
|
|
|
|
1. **OS prüfen:** `uname -s`
|
|
2. **psql prüfen:** `which psql`
|
|
3. **Falls nicht vorhanden:** Installiere je nach OS
|
|
4. **DATABASE_URL laden:** Aus .env.local oder .env
|
|
5. **Verbinden:** `psql "$DATABASE_URL"`
|
|
|
|
Soll ich die Verbindung jetzt herstellen?
|