no puedes hacer
result = execute query;
Cuando te muestre $n en un mensaje de error se refiere a un parametro de entrada o una variable declarada dentro de la función, asi veras que el mensaje de error te dice exactamente donde es.
Cita: ERROR: syntax error at or near "$1"
LINE 1: SELECT execute $1
Ya que count(*) devuelve un entero:
Código:
declare
contador integer;
begin
SELECT count(*) into contador FROM pg_shadow WHERE usename = ' || quote_literal( $1 ) || ' and passwd = ' || quote_literal( $2 ) || '';
...