Error de 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.

El mensaje es preciso de una manera fácil de malinterpretar: PostgreSQL no está diciendo "round no existe" — está diciendo que no existe ningún round que tome (double precision, integer). La función normalmente está ahí, con una firma distinta, y el HINT sobre casts explícitos es la solución real más a menudo que no.

Qué significa este error

PostgreSQL resuelve las funciones por nombre y tipos de argumento (sobrecarga), con casting implícito limitado. El ejemplo es el caso canónico: el round() de dos argumentos existe para numeric, no para double precision — así que round(x, 2) sobre una columna float falla hasta que casteas. El mismo mecanismo produce operator does not exist: text = integer en comparaciones entre tipos que no coinciden.

Causas comunes

Cómo diagnosticarlo

\df round        -- firmas disponibles por nombre
\dx              -- extensiones instaladas

-- ¿La función existe en alguna parte fuera de 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';

Cómo solucionarlo

🔍 La misma maquinaria de resolución, edición tabla: relation does not exist.