У меня есть отложенный триггер 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;$$;