Запускать триггер после транзакции, а не в каждой строке - PostgreSQL 9.4

У меня есть этот триггер, чтобы гарантировать, что общая сумма всех голосов не проходит 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();

Следует отметить, что «голосование» может быть обновлено, так что это не только ВСТАВКА. Вот где возникает моя проблема, так как один пользователь может изменить количество голосов между автомобилями, а затем триггер будет выпущен, поскольку обновление в одной строке может превысить ограничение в 100, а другие обновления уменьшат другие голоса.

Я надеюсь, что это имеет смысл.

Мне бы хотелось, чтобы триггер назывался AFTER a BEGIN ... COMMIT, поэтому я могу обновить несколько строк, прежде чем проверять, все ли в порядке, - но также вызвать исключение и не сохранять результат, если пользователь пытается обновить голоса более чем на 100.

Ответы на вопрос(1)

Ваш ответ на вопрос