Tentei simplificar e fazer sem o FOR, pensando também em performance.
obs: Usei uma tabela "funcionarios" em analogia à tabela "instrutores"
CREATE OR REPLACE FUNCTION altera_salario() RETURNS TRIGGER AS $$
DECLARE
maior_salario DECIMAL;
salario_acima DECIMAL;
BEGIN
SELECT MAX(funcionarios.salario) FROM funcionarios WHERE id <> NEW.id INTO maior_salario;
IF NEW.salario > maior_salario THEN
salario_acima := NEW.salario;
NEW.salario := maior_salario;
INSERT INTO log_funcionarios (info) VALUES (NEW.nome || ' receberia mais do que 100% dos funcionarios, por isso o salário que seria de '|| salario_acima ||' foi alterado para '|| maior_salario ||'.');
RETURN NEW;
ELSE
RETURN NEW;
END IF;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER tg_altera_salario BEFORE INSERT ON funcionarios
FOR EACH ROW EXECUTE FUNCTION altera_salario();