CREATE OR REPLACE FUNCTION cria_instrutor() RETURNS TRIGGER AS $$
DECLARE
media_salarial DECIMAL;
maior_salario DECIMAL;
instrutores_recebem_menos INTEGER DEFAULT 0;
total_instrutores INTEGER DEFAULT 0;
salario DECIMAL;
percentual DECIMAL (5,2);
BEGIN
SELECT AVG(instrutor.salario) INTO media_salarial FROM instrutor WHERE id <> NEW.id;
SELECT MAX(instrutor.salario) INTO maior_salario FROM instrutor WHERE id <> NEW.id;
IF NEW.salario > maior_salario THEN
NEW.salario := maior_salario;
INSERT INTO log_instrutores (informacao) VALUES (NEW.nome || 'salario recusado, instrutor receberá o teto');
ELSE
NEW.salario > media_salarial THEN
INSERT INTO log_instrutores (informacao) VALUES (NEW.nome || 'recebe acima da média');
END IF;
FOR salario IN SELECT instrutor.salario FROM instrutor WHERE id <> NEW.id LOOP
total_instrutores := total_instrutores + 1;
IF NEW.salario > salario THEN
instrutores_recebem_menos := instrutores_recebem_menos + 1;
END IF;
END LOOP;
percentual = instrutores_recebem_menos::DECIMAL / total_instrutores::DECIMAL * 100;
INSERT INTO log_instrutores (informacao)
VALUES (NEW.nome || ' recebe mais do que' || percentual || '% da grade de instrutores');
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
estou sem o PostgreSQL instalado para saber se não houe erro ... Mas a minha pergunta é a seguinte: preciso colocar o where id <> NEW.id nos select avg e max, já que estou fazendo na trigger before?
esse where não permite que o novo registro faça parte do cálculo, mas como a trigger está rodando antes do insert esse registro já não estaria fora desse cálculo?