2013-11-20 1 views
1

Мне нужно написать триггер уровня инструкции, в котором мне нужно знать, как насчет столбца, если значения будут изменены в течение 24 часов. Например, у моей таблицы эти три столбца Col_1 | Col2 | Col3, я хочу знать, вызвало ли действие обновления какое-либо изменение в col_1 и захочет сохранить это значение в отдельной таблице. Я не хочу использовать триггеры уровня, поскольку обновление может вызвать изменения во многих строках в моей таблице. Я знаю, что в оракуле мы можем использовать сложные триггеры и достичь того же самого результата с триггером уровня инструкции. Но любые предложения для пользователей postgres.Есть ли способ узнать, какие строки изменены в триггере уровня инструкций в postgreSQL?

Большое спасибо!

ответ

1

На триггером на уровне строк, вы можете знать, и в проверке фактов для него до запуска срабатывает событие:

create trigger foo after update on foo 
for each row 
when (row(old.col1, old.col2, …) is distinct from row(new.col1, new.col2, …)) 
execute procedure foo_upd(); 

спусковые Заявление на уровне не дают такой возможности нет, так как они открыли огонь по любое соответствующее заявление в таблице.

Однако, в нечетных и необычных случаях, когда это действительно необходимо, у Вас есть два варианта:

  1. Вы можете создать временную таблицу в качестве триггера уровня строки, заполнить его, когда строка изменяется по мере необходимости, и с помощью триггера на уровне инструкций вы берете его оттуда.
  2. Вы можете проверить, есть ли txid каждой строки в таблице. Это скрытое поле, которое, если оно равно текущей транзакции, подразумевает, что строка была затронута. (Не обязательно обновляется, просто коснулся.)
Смежные вопросы