Вам не хватает END IF
.Я бы переписал это как:
create or replace function loginValidator(nickname varchar,
email varchar,
u_password varchar)
returns boolean
as
$$
DECLARE
checked boolean := false; n_regex varchar; e_regex varchar; p_regex varchar;
BEGIN
-- removed BEGIN
select nickname_r, email_r, password_r into n_regex, e_regex, p_regex from regex;
IF n_regex ~ nickname AND e_regex ~ email AND p_regex ~ u_password
THEN checked := true;
END IF; -- added END IF;
-- removed COMMIT;
RETURN checked;
END;
$$ language plpgsql;
или даже проще:
create or replace function loginValidator(nickname varchar,
email varchar,
u_password varchar)
returns boolean
as
$$
BEGIN
RETURN (select COUNT(*)
from regex
WHERE nickname_r ~ nickname
AND email_r ~ email
AND password_r ~ u_password)::boolean;
END;
$$ language plpgsql;
Я надеюсь, что вы не записываете пароли в виде открытого текста.