我的一些数据模型有一些关系,必须在对其子进行更改时保持更新,例如多点位置,这些位置是许多必须更新点位置的子项的集合如果一个孩子搬迁。这种关系有很多种,我想要在一个触发器+程序中处理这些关系的完整性,在更新父母受影响关系的相关字段时触发以下过程。如何在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-code-on-so-when-asking-question-285557#285557) –