Выполнять отложенный триггер только один раз для каждой строки в PostgreSQL

У меня есть отложенный триггер AFTER UPDATE для таблицы, который срабатывает при обновлении определенного столбца. Это целочисленный тип, который я использую как счетчик.

Я не уверен на 100%, но похоже, что если я увеличиваю этот конкретный столбец 100 раз во время транзакции, триггер ставится в очередь и выполняется 100 раз в конце транзакции.

Я бы хотел, чтобы триггер планировался только один раз для каждой строки, независимо от того, сколько раз я увеличивал этот столбец.

Могу я как-нибудь это сделать? В качестве альтернативы, если запущенные триггеры должны стоять в очереди, независимо от того, являются ли они дубликатами, могу ли я очистить эту очередь во время первого запуска триггера?

Версия Postgres - 9.1. Вот что я получил:

CREATE CONSTRAINT TRIGGER counter_change
    AFTER UPDATE OF "Counter" ON "table"
    DEFERRABLE INITIALLY DEFERRED
    FOR EACH ROW
    EXECUTE PROCEDURE counter_change();

CREATE OR REPLACE FUNCTION counter_change()
    RETURNS trigger
    LANGUAGE plpgsql
    AS $$
DECLARE
BEGIN

PERFORM some_expensive_procedure(NEW."id");

RETURN NEW;

END;$$;
12
задан Erwin Brandstetter 11 December 2014 в 09:09
поделиться