9.28. Функции триггеров#
9.28. Функции триггеров #
В то время как многие применения триггеров включают пользовательские функции триггеров, Tantor SE-1C предоставляет несколько встроенных триггерных функций, которые могут быть использованы напрямую в определении пользовательских триггеров. Эти функции кратко описаны в Таблица 9.103. (Существуют также дополнительные встроенные функции триггеров, которые реализуют ограничения внешнего ключа и отложенные ограничения индекса. Они не документированы здесь, так как пользователи не обязаны использовать их напрямую).
Для получения дополнительной информации о создании триггеров см. CREATE TRIGGER.
Таблица 9.103. Встроенные функции триггеров
Функция Описание Пример использования |
---|
Подавляет операции обновления, которые ничего не делают. Подробности см. ниже.
|
Автоматически обновляет столбец
|
Автоматически обновляет столбец
|
Функция suppress_redundant_updates_trigger
,
когда применяется в качестве триггера BEFORE UPDATE
на уровне строки,
предотвращает любое обновление, которое фактически не изменяет данные в
строке, от его осуществления. Это переопределяет нормальное поведение, которое всегда
выполняет физическое обновление строки
независимо от того, изменились ли данные или нет. (Это нормальное поведение
ускоряет выполнение обновлений, так как не требуется проверка, и также
полезно в определенных случаях).
В идеале, следует избегать выполнения обновлений, которые фактически не изменяют данные в записи. Избыточные обновления могут занимать значительное время, особенно если требуется изменить много индексов, и занимать место в мертвых строках, которые в конечном итоге придется очистить. Однако обнаружение таких ситуаций в клиентском коде не всегда просто или даже возможно, а написание выражений для их обнаружения может быть подвержено ошибкам. Альтернативой является использование функции suppress_redundant_updates_trigger
, которая пропускает обновления, не изменяющие данные. Однако следует использовать ее осторожно. Триггеру требуется какое-то время для каждой записи, поэтому, если большинство записей, затронутых обновлениями, действительно изменяются, использование этого триггера сделает обновления в среднем медленнее.
Функцию suppress_redundant_updates_trigger
можно добавить к таблице следующим образом:
CREATE TRIGGER z_min_update BEFORE UPDATE ON tablename FOR EACH ROW EXECUTE FUNCTION suppress_redundant_updates_trigger();
В большинстве случаев вам нужно запускать этот триггер последним для каждой строки, чтобы он не переопределял другие триггеры, которые могут изменять строку. Учитывая, что триггеры запускаются в порядке имен, вы должны выбрать имя триггера, которое идет после имени любого другого триггера, который может быть у вас на таблице. (Отсюда и префикс “z” в примере).