No entiendo el fin de esta comprobación, si solo comprobases el user todavia tendría sentido, pero la password ¿por qué? ¿para qué? Estos son usuarios de la BD!
Yo cambiaría esa función de plpgsql a sql, usa plpgsql cuando lo que quieras hacer no se pueda con sql.
Código:
CREATE OR REPLACE FUNCTION f_valida_usuario(text,text)
RETURNS boolean as $$
SELECT count(*) != 0 FROM pg_shadow WHERE usename = $1 and passwd = $2;
$$ LANGUAGE 'sql';
a que queda basante más simple?
Salu2