Run-Trigger nach der Transaktion, nicht in jeder Zeile - PostgreSQL 9.4

Ich habe diesen Auslöser, um sicherzustellen, dass die Gesamtsumme aller Stimmen nicht 100 überschreitet:

CREATE FUNCTION limit_votes() RETURNS TRIGGER AS $limit_votes$
    DECLARE
        votes_total int;
    BEGIN
        votes_total := NEW.vote + (SELECT SUM(vote) FROM cars WHERE portfolio_id = NEW.portfolio_id AND car != NEW.car);
        IF votes_total > 100 THEN
            RAISE EXCEPTION 'votes_limit_exceeded';
        END IF;
        RETURN NEW;
    END;
$limit_votes$ LANGUAGE plpgsql;
CREATE TRIGGER limit_votes BEFORE INSERT OR UPDATE ON cars FOR EACH ROW EXECUTE PROCEDURE limit_votes();

Es sollte erwähnt werden, dass eine "Abstimmung" aktualisiert werden kann, es handelt sich also nicht nur um INSERTs. Hier tritt mein Problem auf, da ein Benutzer die Stimmen zwischen Autos ändern kann und dann der Auslöser ausgegeben wird, wenn eine Aktualisierung in einer einzelnen Zeile das Limit von 100 überschreitet, bevor die anderen Aktualisierungen die anderen Stimmen verringern.

ch hoffe, es macht Sin

Ich möchte, dass der Trigger NACH EINEM BEGINNEN ... EINTRAG aufgerufen wird, damit ich mehrere Zeilen aktualisieren kann, bevor ich überprüfe, ob alles in Ordnung ist. Außerdem kann ich eine Ausnahme auslösen und das Ergebnis nicht speichern, wenn ein Benutzer versucht, die Stimmen auf mehr zu aktualisieren als 100.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage