powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригер, смекалка не помогает...
5 сообщений из 5, страница 1 из 1
Тригер, смекалка не помогает...
    #33287642
darkio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вступление:
Суть задачи заключается в следующем:
есть таблица которая представляет древо nested sets,
id|pid|name|left|right

приблизительное описание работы:
при запросах используются только id|pid|name
left|right заполняются с помощью тригеров(тригера)

при удалении обьекта с конкретным id тригер
1) удаляет, все обьекты у которых lft между lft и rgt удаляемого обьекта
2) изменяет lft или rgt других обьектов если эти lft или rgt больше lft удаляемого обьекта
3)блаблаблафырфырфыр

суть проблемы:
тригер вызывается несколько раз из-за самого себя, тоесть операции по удалению которые он выполняет вызывают срабатывание этого самого тригера, в итоге lft и rgt коректируются несколько раз и становятся неправильными

задача:
как сделать чтоб операции по удалению которые вызывает тригер не вызывали этот тригер опять?

спасибо, за то что дочитали досюда
...
Рейтинг: 0 / 0
Тригер, смекалка не помогает...
    #33287645
darkio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
если кто не понял в чем речь то вот грубое решение моей проблемы:

в теле тригера:
begin:
1). убираем тригер с таблицы
2). выполняем необходимые изменения
3). ставим тригер заново
end;


я надеюсь что кто нибудь предложит более быстрое и логичное решение

типа:

begin:
if(проверка на то что тригер вызван не им же самим ){
выполняем необходимые изменения
}
end;

язык на котором собираюсь етот тригер писать - plpgsql
...
Рейтинг: 0 / 0
Тригер, смекалка не помогает...
    #33287662
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) добавить поле "не нуждается в обработке триггером" в изменяемую таблицу (для удаления не подойдет)
2) записывать в отдельную таблицу список id изменяемых/удаляемых строк, для которых не нужно выполнять триггер
3) хранить признак временного отключения триггера в отдельной табличке
4) хранить такой признак в глобальных переменных (нужен pl/perl, pl/tcl или pl/python)
...
Рейтинг: 0 / 0
Тригер, смекалка не помогает...
    #33287673
darkio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
фффф1) добавить поле "не нуждается в обработке триггером" в изменяемую таблицу (для удаления не подойдет)
2) записывать в отдельную таблицу список id изменяемых/удаляемых строк, для которых не нужно выполнять триггер
3) хранить признак временного отключения триггера в отдельной табличке
4) хранить такой признак в глобальных переменных (нужен pl/perl, pl/tcl или pl/python)
сенькс мэн =]
...
Рейтинг: 0 / 0
Тригер, смекалка не помогает...
    #33288050
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще извратиться через VIEW и RULE:
Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE VIEW nested_set_view AS SELECT * FROM nested_set_tbl;
CREATE FUNCTION insert_ns_node(_data record) returns void as $$....$$
CREATE RULE nv_insert AS ON INSERT TO nested_set_view
	DO INSTEAD SELECT insert_ns_node(NEW);
CREATE RULE nv_delete AS ON DELETE TO nested_set_view
	DO INSTEAD SELECT delete_ns_node(OLD);

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригер, смекалка не помогает...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]