Erreur PostgreSQL : division by zero

ERROR:  division by zero

Une division (ou un modulo) dans la requête a atteint un dénominateur nul. Contrairement à certaines bases de données et à la plupart des environnements en virgule flottante, PostgreSQL lève une erreur au lieu de renvoyer NULL ou l'infini — donc toute division dont le dénominateur peut être nul doit dire ce qui doit se passer.

Ce que signifie cette erreur

L'erreur annule toute l'instruction (et la transaction), même si une seule ligne sur des millions avait le zéro. C'est pourquoi elle apparaît typiquement dans les agrégations et les rapports : tout fonctionne jusqu'au premier jour où un groupe est vide ou un total est nul. La solution est presque toujours le même idiome, appliqué au site de la division.

Causes fréquentes

Comment la diagnostiquer

Trouvez les divisions dans la requête et demandez-vous quel dénominateur peut être nul. Pour voir les lignes fautives, sélectionnez l'expression du dénominateur avec ses clés de regroupement et filtrez sur zéro — les lignes qui reviennent sont celles qui feront exploser la division.

Comment la corriger

-- L'idiome standard : dénominateur nul → résultat NULL
SELECT clicks / NULLIF(impressions, 0) AS ctr FROM stats;

-- Si vous voulez 0 (ou une autre valeur par défaut) au lieu de NULL :
SELECT COALESCE(clicks / NULLIF(impressions, 0), 0) AS ctr FROM stats;