Обновите значение столбца с помощью триггера postgresql / извлеките значение из запроса insert

#postgresql #triggers #sql-update

#postgresql #триггеры #sql-обновление

Вопрос:

Всякий раз, когда пользователь оценивает фильм, такой триггер должен вызываться и обновлять рейтинг фильма с рейтингом. Как мне извлечь значение movie_id из запроса insert into ratings values (movie_id, /*etc*/) ?

 create trigger new_rating after insert on ratings
execute procedure update_movie_rating();

create or replace function update_movie_rating()
returns trigger 
as $new_rating$
begin 
update movies 
set averagerating =
select avg(r.rating)
from ratings r
where r.movie_id = /*movieid fetched from insert query*/
return new;
end;
$new_rating$ language plpgsql;
 

Комментарии:

1. Видишь postgresql.org/docs/12/plpgsql-trigger.html

Ответ №1:

Предполагая, что поле в таблице «рейтинги» называется movie_id:

 where r.movie_id = NEW.movie_id
 

Вы можете найти подробное объяснение здесь:
https://www.postgresql.org/docs/current/plpgsql-trigger.html

В любом случае, вас интересует эта конкретная часть:

Когда функция PL / pgSQL вызывается в качестве триггера, в блоке верхнего уровня автоматически создаются несколько специальных переменных. Они есть:

НОВОЕ:

ЗАПИСЬ типа данных; переменная, содержащая новую строку базы данных для операций ВСТАВКИ / ОБНОВЛЕНИЯ в триггерах на уровне строк. Эта переменная имеет значение null в триггерах уровня оператора и для операций УДАЛЕНИЯ.