Der typische Ablauf
Ein Auskunftsersuchen läuft in drei Phasen:
- Anfrage eingeht → Identität prüfen, Frist notieren (1 Monat)
- Daten zusammenstellen → Alle personenbezogenen Daten finden und exportieren
- Auskunft erteilen → Strukturiert bereitstellen, Zusatzinformationen nach Artikel 15(1) beifügen
Phase 2 ist der technisch aufwendige Teil. Ohne Tooling bedeutet das: jede Tabelle manuell durchsuchen, Ergebnisse zusammenführen, Daten formatieren. Bei einer Datenbank mit 20+ Tabellen dauert das Stunden.
Phase 2 automatisieren
Alle Daten einer Person finden
SELECT pgcomply.inspect('anna.schmidt@example.de');
table_name | column_name | pii_type | value
------------+-------------+-------------+--------------------------------
users | email | email | anna.schmidt@example.de
users | name | person_name | Anna Schmidt
users | phone | phone | +49 170 1234567
profiles | address | address | Musterstraße 12, 24103 Kiel
orders | shipping_addr| address | Musterstraße 12, 24103 Kiel
newsletter | email | email | anna.schmidt@example.de
sessions | ip_address | ip_address | 192.168.1.42
Daten als JSON exportieren
SELECT pgcomply.export_user_data('anna.schmidt@example.de', 'json');
Das Ergebnis ist ein strukturiertes JSON-Dokument:
{
"subject_id": "anna.schmidt@example.de",
"exported_at": "2026-02-20T10:30:00Z",
"tables": {
"users": {
"email": "anna.schmidt@example.de",
"name": "Anna Schmidt",
"phone": "+49 170 1234567"
},
"profiles": {
"address": "Musterstraße 12, 24103 Kiel"
},
"orders": [
{"order_id": "ORD-2025-4421", "shipping_addr": "Musterstraße 12, 24103 Kiel"},
{"order_id": "ORD-2026-0089", "shipping_addr": "Musterstraße 12, 24103 Kiel"}
]
}
}
Dieses JSON erfüllt gleichzeitig Artikel 15 (Auskunft) und Artikel 20 (Datenportabilität in maschinenlesbarem Format).
Zusatzinformationen nach Artikel 15(1)
Neben den Daten selbst müssen Sie folgende Informationen bereitstellen:
Verarbeitungszwecke
SELECT * FROM pgcomply.consent_purposes();
purpose_key | description | legal_basis | active_consents
-------------+------------------------------+-------------------+----------------
account | Benutzerkonto und Service | contract | 4,521
newsletter | Wöchentlicher Newsletter | consent | 1,203
analytics | Produktverbesserung | legitimate_interest| 4,521
Empfänger
-- Drittanbieter, die Zugang zu Daten haben
SELECT * FROM pgcomply.get_tags('_data_recipients');
Speicherdauer
SELECT * FROM pgcomply.retention_policies();
Prozess in Ihre Anwendung integrieren
# Django-Beispiel: Auskunftsersuchen-Endpoint
def handle_sar_request(request, user_email):
with connection.cursor() as cursor:
# Daten exportieren
cursor.execute(
"SELECT pgcomply.export_user_data(%s, 'json')",
[user_email]
)
user_data = cursor.fetchone()[0]
# Antwort zusammenstellen
response = {
"betroffene_person": user_email,
"datum": datetime.now().isoformat(),
"personenbezogene_daten": user_data,
"verarbeitungszwecke": get_purposes(),
"speicherdauer": get_retention_info(),
"ihre_rechte": {
"berichtigung": "Artikel 16 DSGVO",
"löschung": "Artikel 17 DSGVO",
"einschränkung": "Artikel 18 DSGVO",
"datenportabilität": "Artikel 20 DSGVO",
"widerspruch": "Artikel 21 DSGVO",
"beschwerde": "Landesbeauftragter für Datenschutz"
}
}
return JsonResponse(response)
Zusammenfassung
Ein DSGVO-Auskunftsersuchen in PostgreSQL bearbeiten: inspect() findet alle Daten, export_user_data() exportiert sie als JSON. Zusammen mit den Zusatzinformationen aus consent_purposes() und retention_policies() haben Sie eine vollständige Artikel-15-Antwort — automatisiert statt manuell, in Sekunden statt Stunden.