业务场景是:
通过一系列的数据处理,可以对每个用户打标签,在一个表A中存储每个用户的标签信息,用户和标签是一对一,现在有个需求要把用户的所有标签聚合起来,即每行数据包括用户ID和标签的集合两个字段,再把标签的集合更新到用户信息表中,用户信息表中的字段有用户ID,用户属性,用户标签。
因为用户数据量大,不能采用传统的将所有的数据查询出来放在内存中计算。
目前的想法是借助数据库内部处理。很自然想到了采用触发器实现。
以下为创建触发器的步骤:

CREATE OR REPLACE FUNCTION user_info_update_trigger()
RETURNS TRIGGER AS
$$
declare
--tablecity text;
strSQL text;
BEGIN
--tablecity:='user_tag_partition'||NEW.tagid;
--strSQL := 'INSERT INTO '||tablecity ||' select $1.*';
strSQL:= 'UPDATE user_info SET tags='||NEW.tags||' WHERE guid='||NEW.uid;
EXECUTE strSQL USING NEW;
RETURN NULL;
END
$$
LANGUAGE plpgsql ;
--==================================================
CREATE TRIGGER user_info_update_trigger BEFORE INSERT ON user_tags
FOR EACH row
EXECUTE PROCEDURE user_info_update_trigger() ;
insert into user_tags(uid,tags) SELECT uid,string_agg(tagname,',') tags FROM user_tag group by uid




