Обновить строку таблицы на основе другой вставки таблицы с помощью TRIGGER? - PullRequest
0 голосов
/ 27 апреля 2018

Я немного застрял на этом. Я использую триггер, чтобы при добавлении новой записи данных в VISITED он обновлял атрибут посещений в таблице, называемой местами. Тем не менее, я не знаю, как сделать так, чтобы только посещение вставленной строки обновлялось в таблице PLACES. Что происходит, так это то, что вся колонка посещений обновляется в МЕСТАХ для каждого места, которое также находится в ПОСЕТЕНИИ ... Я пытался использовать

SET NEW.visits = visits + 1

Но тогда я получаю сообщение об ошибке, что новое не распознается ... какие-либо идеи / предложения? (

CREATE OR REPLACE FUNCTION log_visits() RETURNS TRIGGER AS $BODY$
 BEGIN
   UPDATE places
   SET visits = visits + 1
   FROM visited WHERE(places.name = visited.name AND 
places.borough = visited.borough);
   RETURN NEW;
 END;
$BODY$
LANGUAGE plpgsql;


CREATE TRIGGER trigger_visits AFTER INSERT ON visited
FOR EACH ROW EXECUTE PROCEDURE
log_visits(); 

1 Ответ

0 голосов
/ 27 апреля 2018

Вы должны обновить только те строки, на которые указывает new:

create or replace function log_visits() 
returns trigger as $body$
begin
    update places
    set visits = visits + 1
    where places.name = new.name 
    and places.borough = new.borough;
    return null;
end;
$body$
language plpgsql;

Кстати, триггер после вставки должен вернуть null (хотя любое возвращаемое значение игнорируется).

Проверьте это в DbFiddle.

...