2013-08-16 3 views
0

В моей базе данных PostgreSQL 9.2 определено множество триггеров на уровне строк AFTER DELETE, которые используются для удаления дочерних строк при удалении родительской строки. (Есть также много FK с ON DELETE CASCADE в случаях, когда дочерняя строка ссылается на родительскую строку.) Это работает, но очень медленно, когда многие строки необходимо удалить. Есть ли способ использовать триггеры на уровне инструкций для этого или другого способа сделать удаление более эффективным? Я не могу понять, как получить удаленные строки в триггерной функции уровня инструкций - или любую полезную информацию о том, что только что произошло.Более эффективные триггеры удаления в PostgreSQL

+0

Почему бы не использовать каскадные удаления? – Elias

+0

@Elias Это не принесет никакой пользы, так как на самом деле они просто триггеры на уровне строк под капотом прямо сейчас ... –

ответ

2

На данный момент мало.

Вы можете скопировать информацию о строках, которые нужно удалить, вставив их в боковой стол в триггере BEFORE ... FOR EACH ROW, а затем введите AFTER триггер уровня инструкции для удаления из дочерних таблиц, но это не будет хорошо работать со встроенными - во внешнем принудительном исполнении.

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

+0

Это звучит как возможность. Почему вы говорите, что это не сработает с применением FK? Я не понимаю, в чем проблема. – EM0

+0

Ограничения @EM FK сами реализуются как триггеры; они загонят, удалили ли вы строки. –

Смежные вопросы