Ejecutar disparador después de la transacción, no en cada fila - PostgreSQL 9.4

Tengo este activador para garantizar que la suma total de todos los votos no pase 100:

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();

Cabe mencionar que se puede actualizar un "voto", por lo que no se trata solo de INSERT. Aquí es donde ocurre mi problema, ya que un usuario puede cambiar los votos entre los autos y luego el gatillo se emite ya que una actualización en una sola fila podría exceder el límite de 100, antes de que las otras actualizaciones disminuyan los otros votos.

Espero que tenga sentido.

Me gustaría que el disparador se llame DESPUÉS de COMENZAR ... COMPROMISO, para poder actualizar varias filas antes de verificar que todo esté en orden, pero también generar una excepción y no guardar el resultado si un usuario intenta actualizar los votos a más de 100

Respuestas a la pregunta(1)

Su respuesta a la pregunta