Вышеприведенная функция работает, если вы обновите свой SQL, чтобы выполнить явное приведение.
Однако, если вы добавите «как неявный» в конец вашего оператора «create cast», Postgres сможет автоматически выяснить, что вы пытаетесь сделать, сравнивая целое число с varchar, которое можно преобразовать в целое число.
Вот мое обновленное утверждение, которое, казалось, работает «неявно»:
CREATE FUNCTION toint(varchar)
RETURNS integer
STRICT IMMUTABLE LANGUAGE SQL AS
'SELECT cast($1 as integer);';
CREATE CAST (varchar AS integer) WITH FUNCTION toint(varchar) as Implicit;