暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgresql数据库中插入数据时同时修改另一个表中的字段

小邱说 2016-11-24
635

业务场景是:


通过一系列的数据处理,可以对每个用户打标签,在一个表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


文章转载自小邱说,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论