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 ответов

7 просмотров

Посмотрите внимательно на определение триггера в "\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...

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

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

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

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Добрый день, чат. Мне в очередь из других RabbitMQ по shovel валятся метрики в формате текста для Prometheus. Помогите пожалуйста подружить RabbitMQ и Prometheus, чтобы он (...
Aleksey
4
Карта сайта