172 похожих чатов

Всем привет, я уже пересмотрел кучу туториалов, и гуглил, но

не могу понять. я хочу написать тригерную функцию, но у меня и new и old с значениями null, и я не могу получить доступ к полям.
Я делаю update записи, и по идеи old должен не быть null, но так не получается... Что может быть не так?
CREATE OR REPLACE FUNCTION throw_frozen_date_exception() RETURNS trigger AS $$
declare
rowDate date := null;
maxFrozenDate date := (select max(date)
from accruing_frozen_days);
BEGIN
IF (TG_OP = 'DELETE') THEN
rowDate := (old.end_date AT TIME ZONE 'Europe/Moscow')::DATE;
ELSIF (TG_OP = 'UPDATE') THEN
rowDate := (old.end_date AT TIME ZONE 'Europe/Moscow')::DATE;
ELSIF (TG_OP = 'INSERT') THEN
rowDate := (new.end_date AT TIME ZONE 'Europe/Moscow')::DATE;
END IF;

if old.end_date is null then
RAISE EXCEPTION 'old is null';
end if;
if rowDate is not null and maxFrozenDate is not null and rowDate <= maxFrozenDate then
RAISE EXCEPTION 'Нельзя менять транзакции в закрытых днях';
end if;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER check_frozen
after insert or update or delete
on transactions
execute procedure throw_frozen_date_exception();

4 ответов

16 просмотров

Посмотрите внимательно на определение триггера в "\d transactions" — увидите. ;)

Alexander-Michailov Автор вопроса
Yaroslav Schekin
Посмотрите внимательно на определение триггера в "...

честно говоря совсем не вижу... Был бы очень рад, если бы подсказали)

Alexander Michailov
честно говоря совсем не вижу... Был бы очень рад, ...

Смотрите: Triggers: check_frozen AFTER INSERT OR DELETE OR UPDATE ON transactions FOR EACH STATEMENT EXECUTE PROCEDURE throw_frozen_date_exception() Из https://www.postgresql.org/docs/current/sql-createtrigger.html : FOR EACH ROW FOR EACH STATEMENT This specifies whether the trigger function should be fired once for every row affected by the trigger event, or just once per SQL statement. If neither is specified, FOR EACH STATEMENT is the default.

Alexander-Michailov Автор вопроса
Yaroslav Schekin
Смотрите: Triggers: check_frozen AFTER INSERT...

Огромное спасибо, разобрался)))

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта