Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригер от сессии / 10 сообщений из 10, страница 1 из 1
23.07.2008, 14:38
    #35447252
Shagrat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
Можно и если да то как сделать триггер от сессии.

Тоесть есть соединение при котором должен срабатывать триггер, И есть при которых не должен (например служебные программы).

Интересует реализация условия в триггере при котором он не срабатывает.
И каким образом и гре организовать эти переменные для триггеров, чтобы область видимости было конкретное соединение или сессия.
...
Рейтинг: 0 / 0
23.07.2008, 15:08
    #35447347
Степан H.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
первое что приходит в голову - это реагировать на имя пользователья

например

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
IF user='winuser' THEN

  IF (TG_OP = 'INSERT') THEN
   RETURN NEW;
 END IF;

END IF;

ну а для пользователей можно завести отдельную таблицу из которой черпать что можно а что нельзя.
...
Рейтинг: 0 / 0
23.07.2008, 15:46
    #35447487
Shagrat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
С юзером идея хорошая, как я не подумал. Служебным порогам итак выдается отдельный логин.
Но хотелось чтобы всетаки программа могла выбирать режим работы.

И боюсь что работа с таблицей флагов будет дополнительной нагрузкой на сервер.
...
Рейтинг: 0 / 0
23.07.2008, 17:35
    #35447930
Степан H.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
тоесть вам нужто чтоб режим работы зависел от времени работы сессии?
опять-же, никаких проблем - дополнительная таблица с полями date_begin и date_end


в начале триггреа процедура:
на входе (user, current_timestamp) на выходе некий ses_id

ну а дальше триггер

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IF ses_id= 1  THEN

  IF (TG_OP = 'INSERT') THEN
   RETURN NEW;
 END IF;

ELSIF ses_id= 2  THEN

  IF (TG_OP = 'INSERT') THEN
   RETURN NEW;
 END IF;

END IF;

О вложенных запросах при грамотной структуре можно не волноваться. Постгри вложенные запросы отрабативает очень хорошо.
...
Рейтинг: 0 / 0
23.07.2008, 18:11
    #35448059
Shagrat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
Нет чтобы прога сама переключала режим, и время тут непричем.
С таблицами не получится. Т.к. это будет действовать на всех а не на конкретное соединение
...
Рейтинг: 0 / 0
23.07.2008, 18:18
    #35448077
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
ShagratНет чтобы прога сама переключала режим, и время тут непричем.
С таблицами не получится. Т.к. это будет действовать на всех а не на конкретное соединениестранное умозаключение. Существуют темповые объекты. Например таблицы и счетчики. Видны только создавшему их сеансу (а то и - транзакции). Существует возможность присвоить некий ай-ди сеансу (даже если не умеем узнавать присвоенный сервером, или же "сеанс приложения" отличаем в нашей системе абстраций от сеанса-соединения SQL-сервера) и записать в некую постоянную таблицу строку с этим ай-ди и его настройками (как передать этот ай-ди в триггер - отдельный вопрос из той же области - "переменные сеанса"). Возможностей вообще говоря много. Посмотрите поиском на предмет "переменные сеанса". Все что там обсуждалось может быть применено и вами.
...
Рейтинг: 0 / 0
23.07.2008, 19:12
    #35448160
Степан H.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
ShagratНет чтобы прога сама переключала режим, и время тут непричем.
С таблицами не получится. Т.к. это будет действовать на всех а не на конкретное соединение



Теперь вообще неясно ... какую проблему изначально вы хотите решить

... ну используйте на входе в процедуру ID сеанса, а на выходе ID для отработки в триггере.
...
Рейтинг: 0 / 0
24.07.2008, 17:56
    #35450405
Shagrat
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
Привожу пример

Есть несколько таблиц с полем modify (ДатаВремя) в это поле каждый раз при INSER или UPDATE ставится текущая дата сервера.

Теперь есть 2 проги
1. Клиентская которая должна работать с эти триггером.
2. Есть служебная которая синхронизируется с другой базой (тоесть добавляет и изменяет поля). Но при ее работе тригер не должен срабатывать.

Так вот я хотел сделать условие в триггера по которому если работает прога2 тригер не прописывает поле modify.

Так как проги работают параллельно то фишка с отключением триггера не пройдет. Привязываться у пользователю не хотелось.

Я думал это сделать через какиенибудь переменные область видимости равен сессии (конекту). Чтобы прога2 сама могла входить в режим отключения триггера.
...
Рейтинг: 0 / 0
29.07.2008, 09:47
    #35456910
SeniorAndre
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
Уважаемый 4321...., подскажите как называются функции для работы с пользовательскими переменными сеанса. Не могу найти... :( На данный момент могу только temp таблицы делать в пределах сеанса и там хранить данные, а хочется проще ... ???
...
Рейтинг: 0 / 0
29.07.2008, 10:59
    #35457139
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тригер от сессии
SeniorAndreУважаемый 4321...., подскажите как называются функции для работы с пользовательскими переменными сеанса. Не могу найти... :( На данный момент могу только temp таблицы делать в пределах сеанса и там хранить данные, а хочется проще ... ???бугога

как назовёте - так и будут называться.


Я же сказал - ищите про "переменные сеанса". Обсуждалось на данном форуме многократно. В течении нескольких лет.
Изначально для "чистых переменных" (т.е. не через темповые таблички или temp-сиквенсы) предлагалось использовать к примеру plperl или pltcl (у меня такие ф-ии назывались как-то схоже с get_textvar/set_textvar, были написаны на pltcl, счас уже и не найду... http://sql.ru/forum/actualthread.aspx?tid=163134&pg=1&hl=perl+tcl), потом появились* и "штатные ф-ии", необходимость в доп языках отпала.


___________
* Что касается реализованных в самом пг - Вы батенька шутник - Global session variables - Ваша ремарка?
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Тригер от сессии / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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