Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 Помогите разобраться чем грозит RETURN NULL;  [new]
sstatistic
Member

Откуда:
Сообщений: 121
Приветствую.

Помогите разобраться чем грозит RETURN NULL в триггерной функции.


Мне надо запретить изменения в таблице, вставку, изменение и удаления (RULE не предлагать).


обычно смотрю используется

RETURN OLD;

или RETURN NEW;


но с удалением возникли проблемы, сделал RETURN NULL;

Триггерная функция одна на вставку, изменение и удаления.


Протестировал - все работает, т.е. запрещает изменения в табличке.

Скажите. чем RETURN NULL; может грозить?
2 июн 21, 11:53    [22330235]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
Melkij
Member

Откуда: Санкт-Петербург
Сообщений: 1312
sstatistic,

raise exception обычно делается.

А return null делает то что описано в документации: https://www.postgresql.org/docs/current/plpgsql-trigger.html
Row-level triggers fired BEFORE can return null to signal the trigger manager to skip the rest of the operation for this row (i.e., subsequent triggers are not fired, and the INSERT/UPDATE/DELETE does not occur for this row).
...
The return value of a row-level trigger fired AFTER or a statement-level trigger fired BEFORE or AFTER is always ignored
2 июн 21, 12:02    [22330243]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4785
sstatistic
Приветствую.

Помогите разобраться чем грозит RETURN NULL в триггерной функции.


Мне надо запретить изменения в таблице, вставку, изменение и удаления (RULE не предлагать).



А не проще на уровне прав доступа к таблице всё это сделать?

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
2 июн 21, 12:40    [22330261]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
sstatistic
Member

Откуда:
Сообщений: 121
Melkij
sstatistic,

raise exception обычно делается.

А return null делает то что описано в документации: https://www.postgresql.org/docs/current/plpgsql-trigger.html
Row-level triggers fired BEFORE can return null to signal the trigger manager to skip the rest of the operation for this row (i.e., subsequent triggers are not fired, and the INSERT/UPDATE/DELETE does not occur for this row).
...
The return value of a row-level trigger fired AFTER or a statement-level trigger fired BEFORE or AFTER is always ignored


Спасибо.

Получается конкретно для этого случая, NULL подходит.

А оказалось кроме олд и нью еще куча всего есть, TG_TABLE_NAME, например.

Благодарю за ссылочку.
2 июн 21, 14:55    [22330370]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
sstatistic
Member

Откуда:
Сообщений: 121
Maxim Boguk
sstatistic
Приветствую.

Помогите разобраться чем грозит RETURN NULL в триггерной функции.


Мне надо запретить изменения в таблице, вставку, изменение и удаления (RULE не предлагать).



А не проще на уровне прав доступа к таблице всё это сделать?




Это было бы сильно просто.

Там просто логика завязана, что-то можно, что-то нельзя, в одной таблице, поэтому просто правами досутпа тут не получится.
2 июн 21, 14:56    [22330371]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
Maxim Boguk
Member

Откуда: Melbourne, Австралия
Сообщений: 4785
sstatistic
Maxim Boguk
пропущено...


А не проще на уровне прав доступа к таблице всё это сделать?




Это было бы сильно просто.

Там просто логика завязана, что-то можно, что-то нельзя, в одной таблице, поэтому просто правами досутпа тут не получится.


return null или raise exception
зависит от того какое поведение вам требуется внутри транзакции если выполняется запрещенная операция...
тупо пропустить запрещенную операцию и продолжить транзакцию - return null;
если же надо дать ошибку и откатить всю транзакцию - тогда raise exception


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru

Сообщение было отредактировано: 2 июн 21, 15:19
2 июн 21, 15:26    [22330404]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
sstatistic
Member

Откуда:
Сообщений: 121
Maxim Boguk
sstatistic
пропущено...


Это было бы сильно просто.

Там просто логика завязана, что-то можно, что-то нельзя, в одной таблице, поэтому просто правами досутпа тут не получится.


return null или raise exception
зависит от того какое поведение вам требуется внутри транзакции если выполняется запрещенная операция...
тупо пропустить запрещенную операцию и продолжить транзакцию - return null;
если же надо дать ошибку и откатить всю транзакцию - тогда raise exception


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru




Вас понял.

Да, должно быть полностью незаметно ни для приложения ни для пользователя.

null то что надо.
2 июн 21, 17:09    [22330484]     Ответить | Цитировать Сообщить модератору
 Re: Помогите разобраться чем грозит RETURN NULL;  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435
sstatistic
должно быть полностью незаметно ни для приложения ни для пользователя.

Часовую бомбу закладываете на случай увольнения или свинью для поддержки, которую задолбают вопросами "почему мои данные не сохранились"?..
3 июн 21, 14:20    [22330922]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить