PostgreSQL-Fehler: division by zero

ERROR:  division by zero

Eine Division (oder Modulo) in der Query traf einen Nenner von null. Anders als manche Datenbanken und die meisten Fließkomma-Umgebungen wirft PostgreSQL einen Fehler, statt NULL oder unendlich zurückzugeben — daher muss jede Division, deren Nenner null sein kann, sagen, was passieren soll.

Was dieser Fehler bedeutet

Der Fehler bricht die gesamte Anweisung (und die Transaktion) ab, selbst wenn nur eine Zeile von Millionen die Null hatte. Deshalb taucht er typischerweise in Aggregationen und Reports auf: alles funktioniert bis zum ersten Tag, an dem eine Gruppe leer oder eine Summe null ist. Der Fix ist fast immer dasselbe Idiom, an der Divisionsstelle angewandt.

Häufige Ursachen

So diagnostizieren Sie ihn

Finden Sie die Divisionen in der Query und fragen Sie, welcher Nenner null sein kann. Um die anstößigen Zeilen zu sehen, selektieren Sie den Nenner-Ausdruck mit seinen Gruppierungsschlüsseln und filtern Sie auf null — die zurückkommenden Zeilen sind diejenigen, die die Division sprengen werden.

So beheben Sie ihn

-- Das Standard-Idiom: Nenner null → Ergebnis NULL
SELECT clicks / NULLIF(impressions, 0) AS ctr FROM stats;

-- Wenn Sie 0 (oder einen anderen Default) statt NULL wollen:
SELECT COALESCE(clicks / NULLIF(impressions, 0), 0) AS ctr FROM stats;