PostgreSQL-Fehler: 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.

Die Meldung ist auf eine Weise präzise, die leicht falsch gelesen wird: PostgreSQL sagt nicht "round existiert nicht" — es sagt, es existiert kein round, das (double precision, integer) nimmt. Die Funktion ist meist da, mit einer anderen Signatur, und der HINT über explizite Casts ist häufiger als nicht die eigentliche Lösung.

Was dieser Fehler bedeutet

PostgreSQL löst Funktionen nach Name und Argumenttypen auf (Overloading), mit begrenztem impliziten Casting. Das Beispiel ist der kanonische Fall: das zweiargumentige round() existiert für numeric, nicht für double precision — daher schlägt round(x, 2) auf einer Float-Spalte fehl, bis Sie casten. Derselbe Mechanismus erzeugt operator does not exist: text = integer für Vergleiche zwischen nicht zusammenpassenden Typen.

Häufige Ursachen

So diagnostizieren Sie ihn

\df round        -- verfügbare Signaturen nach Name
\dx              -- installierte Erweiterungen

-- Existiert die Funktion irgendwo außerhalb von 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';

So beheben Sie ihn

🔍 Dieselbe Auflösungsmaschinerie, Tabellen-Edition: relation does not exist.