|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Добрый день. Перелопатил всю документацию и не нашёл функции проверки в триггере, изменено ли поле, по типу IF UPDATING() из Oracle. Один вариант пока только если Код: sql 1.
Но в таблице есть геометрические поля, то есть одно поле тронули, а проверять нужно будет все! ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 08:27 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Под изменением Вы понимаете, внесение нового значения в поле или упоминание в UPDATE? Если первое Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 10:34 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Guzya Под изменением Вы понимаете, внесение нового значения в поле или упоминание в UPDATE? Если первое Код: sql 1.
И это неверно... ( NULL != NULL ) = NULL = false надо таки через IS NOT DISTINCT сверять... но вопрос а что автор топика спрашивает... я не до конца понял что требуется и в чем проблема. и главное какую задачу решаем. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 10:50 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Maxim Boguk, Задача написания триггера истории. То есть если какое то поле поменялось, куда то пишется старое и новое значение. На сколько будет эффективно DISTINCT FROM для больших объёмов данных? Например в таблице 100500 полей, обновляем только одно, но в триггере будет DISTINCT FROM на все поля! В том числе большого объёма. Если бы можно было, например как в Oracle или MS SQL проверить через IF UPDATING()? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 13:16 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Григорий Поверенный Maxim Boguk, Задача написания триггера истории. То есть если какое то поле поменялось, куда то пишется старое и новое значение. На сколько будет эффективно DISTINCT FROM для больших объёмов данных? Например в таблице 100500 полей, обновляем только одно, но в триггере будет DISTINCT FROM на все поля! В том числе большого объёма. Если бы можно было, например как в Oracle или MS SQL проверить через IF UPDATING()? Вам надо узнать список измененных полей или просто факт что что то вообще было изменено (без разницы что)? (это две разные задачи) -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2021, 18:31 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Maxim Boguk, список измененных полей, а точнее на какими полями происходили действия. Пример в других СУБД приведён выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 09:31 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Григорий Поверенный Maxim Boguk, список измененных полей, а точнее на какими полями происходили действия. Пример в других СУБД приведён выше. пример в других субд ничего на этом форуме никому почти не говорит... можно вот так вот сделать через jsonb Код: sql 1. 2. 3. 4.
можно что то похожее через hstore сделать Код: sql 1.
PS: надо понимать таки что это именно список реально измененных полей т.е. update ... set f1=1 where...; если f1 уже равен 1 в таблице - даст пустой результат так как не изменилось ничего в реальности. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 10:42 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Григорий Поверенный Пример в других СУБД приведён выше. Другие СУБД не пользуются магией, так что они просто спрятали IS DISTINCT под капот функции. Быстродействие от этого не увеличилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2021, 13:44 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Другие СУБД не пользуются магией Если так то нет вопросов. Но тогда бы при обновлении поля на то же значение в других СУБД проверка IF UPDATING() давала бы отрицательное значение, но это не так. То есть СУБД даёт информацию, над какими полями производились действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 09:38 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Или, что вероятнее, какие поля были упомянуты в запросе UPDATE. Это ты, как написавший запрос, можешь выяснить и без триггера. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.05.2021, 14:09 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov можешь выяснить и без триггера. Так это и нужно сделать внутри триггера... в общем на нет и суда нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 06:52 |
|
Проверка изменено ли поле в триггере.
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Или, что вероятнее, какие поля были упомянуты в запросе UPDATE. Это ты, как написавший запрос, можешь выяснить и без триггера. Учитывая что 90% кода поверх ОРМ работают, а ORM в UPDATE перечисляет всегда все поля таблицы... то особого смысла в этой задаче я не вижу. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
11.05.2021, 10:51 |
|
|
start [/forum/topic.php?fid=53&fpage=12&tid=1994044]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 250ms |
total: | 372ms |
0 / 0 |