Некоторые из моих моделей данных имеют отношения, которые должны быть обновлены при изменении их дочерних элементов, таких как многоточечная локация, которая представляет собой коллекцию многих детей с точками, которые необходимо обновить если ребенок перемещается. Множество таких отношений существует, и я хотел бы обработать сохранение целостности этих отношений в одной процедуре триггера +, которая запускает следующую процедуру при обновлении соответствующих полей в отношении затронутых отношений родителя.Как выполнить запрос условно в процедуре plpgsql
Как форматировать эти запросы и условными таким образом, что он выполняет следующие действия:
CREATE TABLE parents (
id BIGSERIAL PRIMARY KEY,
caption TEXT,
title TEXT,
tags CHARACTER VARYING(32)[] DEFAULT '{}',
rating SMALLINT DEFAULT 0
)
CREATE TABLE children (
id BIGSERIAL PRIMARY KEY,
tags CHARACTER VARYING(32)[] DEFAULT '{}',
rating SMALLINT DEFAULT 0
)
CREATE TABLE parent_children (
parent_id BIGINT,
child_id BIGINT
)
CREATE OR REPLACE FUNCTION child_updated_func() RETURNS TRIGGER AS $$
BEGIN
IF (OLD.tags != NEW.tags)
UPDATE parents
SET tags = tags || NEW.tags
WHERE
parent_children.child_id = NEW.id
AND parents.id = parent_children.parent_id;
IF (OLD.rating != NEW.rating)
UPDATE parents
SET rating = MAX(parent_children.rating)
FROM parent_children
WHERE
parent_children.child_id = NEW.id
AND parents.id = parent_children.parent_id;
RETURN NEW;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER child_updated
AFTER UPDATE ON children
FOR EACH ROW
EXECUTE PROCEDURE child_updated_func();
Пожалуйста [править] Ваш вопрос добавить 'создать таблицу 'операторов для рассматриваемых таблиц. [_Formatted_] (http://stackoverflow.com/editing-help#code) ** текст **, пожалуйста, [без скриншотов] (http://meta.stackoverflow.com/questions/285551/why-may-i -not-upload-images-of-code-on-so-when-ask-a-question/285557 # 285557) –