У меня есть две связанные таблицы. Давайте назовем их event_types
и occurrences
со следующими столбцами:
event_types
-------------
id VARCHAR(30)
name VARCHAR(50)
first_event Timestamp
и
occurrences
-------------
id VARCHAR(30)
event_type_id VARCHAR(30)
timestamp Timestamp
postal_number Integer
city VARCHAR(50)
street VARCHAR(50)
Я хочу добавить триггер, который обновляет first_event
в случае, если новый occurrence
придет с более ранним timestamp
.
Вариант использования: причина в том, что мне нужно часто запрашивать эту таблицу event_type
с условиями на first_event
и сортировать ее по этому полю, чтобы получить их внутри временного интервала.
Я пробовал что-то вроде этого:
CREATE OR REPLACE FUNCTION set_to_minimum_time() RETURNS TRIGGER AS
$$
BEGIN
IF NEW.timestamp < SELECT first_event from event_types where id=NEW.event_type_id THEN
UPDATE event_types
SET first_event = NEW.timestamp
WHERE id = NEW.event_type_id
END IF
END;
$$
LANGUAGE PLPGSQL;
CREATE TRIGGER after_trigger_time_updater
AFTER INSERT OR UPDATE OR DELETE
ON occurrences
FOR EACH ROW
EXECUTE PROCEDURE set_to_minimum_time();
Это уже сбой из-за оператора select в предложении if с синтаксической ошибкой. Так как я могу добиться такого обновления с помощью триггера?
Я использую Postgres> 9,5 и 10.
Еще одно замечание: такие обновления в случаях появления не будут появляться очень часто.