La citation est fausse. Il est plus facile d'utiliser des guillemets en dollars $$ :
CREATE OR REPLACE FUNCTION msgfailerror()
RETURNS trigger AS
$$
BEGIN
IF NEW.noces< new.first_column THEN
RAISE EXCEPTION 'cannot have a negative salary';
END IF;
return new;
END;
$$
LANGUAGE plpgsql;
Mais d'un autre côté, qu'est-ce qui ne va pas avec une contrainte de vérification ?