Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / тригерры в Postgres / 21 сообщений из 21, страница 1 из 1
04.09.2014, 06:58:45
    #38737001
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
подскажите пожалуйста а есть ли возможность триггером проверять что записано значение в один столбец, а затем производить с ним какие-нибудь действия и ложить в другой столбец. ну как я уже сделал подсчет суммы пришедших значений и сложение в другой столбец. НО триггер реагирует на все занесения а мне необходимо чтобы он обрабатывал занесение в опрделенный столбец
...
Рейтинг: 0 / 0
04.09.2014, 07:48:51
    #38737021
Izya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

1)
Код: plaintext
1.
CREATE TRIGGER check_update BEFORE  UPDATE OF theColumn  ON theTable
...



2)
Код: plaintext
1.
2.
3.
4.
CREATE TRIGGER check_update ... ON theTable
    ...
     WHEN (OLD.theColumn IS DISTINCT FROM NEW.theColumn) 
    ...
...
Рейтинг: 0 / 0
04.09.2014, 07:51:22
    #38737022
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
т.е. не правильно указывать колонки в хранимой процедуре, а можно сразу создать триггер на определенные колонки, я правильно понимаю?
и это не правильно
Код: sql
1.
2.
3.
4.
5.
CREATE TRIGGER trigger_mof_water_stav12_shipment
  AFTER INSERT 
  ON "SC_Tag"."T_TagData" FOR EACH ROW 
  WHEN (pg_trigger_depth() = 0)
EXECUTE PROCEDURE "SC_Tag".mof_water_stav12_shipment(); 
...
Рейтинг: 0 / 0
04.09.2014, 08:12:54
    #38737033
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
а нет я не правильно наверно выразился. есть столбец - приходит значение с прибора. таких приборов несколько. как указать чтобы триггер реагировал на данные только определенных приборов
пример таблицы
id value time описание1 345 12.23.34 вот на этот тег нужно повесить триггер24456 12.23.34 это добавление не должно обрабатываться3 346 12.23.34 тут некое значение на основании данных триггера
...
Рейтинг: 0 / 0
04.09.2014, 08:15:37
    #38737034
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
ну конечно, не столбец, а строка
...
Рейтинг: 0 / 0
04.09.2014, 09:46:15
    #38737113
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
как понял вот это нужно читать
...
Рейтинг: 0 / 0
04.09.2014, 10:15:45
    #38737148
Izya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roerкак понял вот это нужно читать Нет, это и это надо читать. Триггеры имеет разные реализации в разных СУБД, читать доки по MSSQL при работе с PostgreSQL смысла нет.

По задаче - надо логику в коде триггера отразить, может быть доп. поле - флаг "triggered"(yes|no) в таблицу придется добавить.
...
Рейтинг: 0 / 0
04.09.2014, 13:45:50
    #38737506
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
так то читал. а разве в постгресе нет дмл? было бы круто
CREATE TRIGGER check_update
BEFORE UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
EXECUTE PROCEDURE check_account_update();
как я понимаю old.balance и будет той строкой что я хочу проверять?
...
Рейтинг: 0 / 0
04.09.2014, 13:49:10
    #38737512
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
а нет, это опять же колонка, а мне строка нужна
...
Рейтинг: 0 / 0
04.09.2014, 22:39:12
    #38738025
V&N
V&N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer, в каком кулинарном училище вы учились?
...
Рейтинг: 0 / 0
05.09.2014, 07:10:07
    #38738114
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
а можно про теме
...
Рейтинг: 0 / 0
05.09.2014, 08:34:27
    #38738140
/\/\/\/\/\/\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

Все по теме:
Сперва нужно закончить школу, затем институт, получить какой-нибудь опыт работы. И только потом можно задумываться о триггерах.
До окончания школы это преждевременно.
...
Рейтинг: 0 / 0
05.09.2014, 09:51:01
    #38738200
Триггерман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roerа можно про теме Можно.
Я всегда говорил, что пользования триггерами нужно всячески избегать.
...
Рейтинг: 0 / 0
05.09.2014, 10:12:58
    #38738238
Пиратъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
Триггерманdes1roerа можно про теме Можно.
Я всегда говорил, что пользования триггерами нужно всячески избегать.
Да. Особенно лицам, не достигшим 16-ти лет, к коим относится уважаемый топик-стартер.
...
Рейтинг: 0 / 0
05.09.2014, 12:32:06
    #38738457
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

OLD, NEW это и есть разные версии "строки", OLD - перед изменениями, NEW - после.
...
Рейтинг: 0 / 0
08.09.2014, 07:19:58
    #38740135
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
т.е. CREATE TRIGGER check_update
BEFORE UPDATE ON accounts
FOR EACH ROW
WHEN (OLD.balance IS DISTINCT FROM NEW.balance)
EXECUTE PROCEDURE check_account_update();
правильно?
...
Рейтинг: 0 / 0
08.09.2014, 15:37:58
    #38740691
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

наверное. это вам виднее что вы хотите сделать.
...
Рейтинг: 0 / 0
11.09.2014, 12:15:13
    #38744018
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
млин че задача такая нетривиальная что ли? подсказть никто не может
мне вот такую ошибку бахает
ERROR: INSERT trigger's WHEN condition cannot reference OLD values
LINE 1: ...ta" FOR EACH ROW WHEN (pg_trigger_depth() = 0 AND old."F_Con...
...
Рейтинг: 0 / 0
11.09.2014, 14:31:14
    #38744256
Ы
Ы
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

Так вам же ясно пишут, что в условии WHEN триггера на INSERT недопустимы ссылки на OLD.
...
Рейтинг: 0 / 0
11.09.2014, 15:43:49
    #38744358
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
des1roer,

делайте OLD IS DISTINCT FROM NEW внутри функции check_account_update(); и псё.
...
Рейтинг: 0 / 0
12.09.2014, 08:43:23
    #38744827
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
тригерры в Postgres
все оказалось элементарно
Код: plsql
1.
2.
3.
4.
5.
CREATE TRIGGER trigger_mof_water_stav12_shipment
  AFTER INSERT 
  ON "SC_Tag"."T_TagData" FOR EACH ROW 
  WHEN (pg_trigger_depth() = 0 AND NEW."F_TagName_ID" = 30)
EXECUTE PROCEDURE "SC_Tag".mof_water_stav12_shipment();
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / тригерры в Postgres / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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