2013-05-21 3 views
0

Привет У меня есть проблема с TriggerPostgres избежать триггера при удалении каскада

у меня есть 2 таблицы:

  • t_mandant
  • t_user_has_mandant

когда я удалите строку в t_user_has_mandant я называю триггер beforeDeleteUserMandant() но мне нужна возможность игнорировать вызов триггера, когда я удаляю mandant из t_mandant

потому t_user_has_mandant имеет внешний ключ на t_mandant которая на удалить каскад.

им с помощью Postgres 8.4

+0

Итак, вы хотите изменить логику триггера на 't_user_has_mandant', если удаление было вызвано' CASCADE' FK от 't_mandant'? –

+0

да просто ничего не предпринимать в триггере или полностью игнорировать его –

ответ

1

Read this страница руководства.

Использование переменной

TG_TABLE_NAME

имя типа данных; имя таблицы, вызвавшее вызов триггера .

Вы можете определить, если DELETE был из t_user_has_mandant или t_mandant.

+0

Я попробовал: RAISE NOTICE 'table_name:%', TG_TABLE_NAME; результатом было ИЗВЕЩЕНИЕ: table_name: t_user_has_mandant, но мой запрос sql был удален из t_mandant, где id_mandant = 555 ... –

+0

Hm. Может быть. Я не проверял свой вопрос. –

+0

Другой (но немного уродливый) способ - запросить представление 'pg_stat_activity', чтобы получить текст текущего запроса и искать в нем имена таблиц. –

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