Erreur PostgreSQL : function does not exist

ERROR:  function round(double precision, integer) does not exist
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

Le message est précis d'une manière facile à mal lire : PostgreSQL ne dit pas « round n'existe pas » — il dit qu'aucun round n'existe qui prenne (double precision, integer). La fonction est généralement là, avec une signature différente, et le HINT sur les casts explicites est la vraie solution le plus souvent.

Ce que signifie cette erreur

PostgreSQL résout les fonctions par nom et types d'arguments (surcharge), avec un casting implicite limité. L'exemple est le cas canonique : round() à deux arguments existe pour numeric, pas pour double precision — donc round(x, 2) sur une colonne float échoue tant que vous ne castez pas. Le même mécanisme produit operator does not exist: text = integer pour les comparaisons entre types incompatibles.

Causes fréquentes

Comment la diagnostiquer

\df round        -- signatures disponibles par nom
\dx              -- extensions installées

-- La fonction existe-t-elle quelque part hors du search_path ?
SELECT n.nspname, p.proname
FROM pg_proc p JOIN pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = 'uuid_generate_v4';

Comment la corriger

🔍 Même machinerie de résolution, version table : relation does not exist.