хотя если входящее не текст, а anyelement, да и речь не обязательно про integer, -- то ловить надо
любую ошибку.
SELECT 1E30::integer;
/*
ERROR: integer out of range
SQL-состояние: 22003
*/
иногда бывают забавные вещи
SELECT
(('0.'||repeat('0',350)||1)::double precision )
/*ERROR: "0.000..... 001" is out of range for type double precision
SQL-состояние: 22003
*/
-- последнее, [с т.з. физика], -- минимум -- баг.