使用postgres中的触发器获取一个对象中多个插入行的数据

问题描述 投票:0回答:1

我正在尝试编写一个触发器,该触发器从对应于一个actionId 一次]的插入多行]的表属性中获取数据,并将所有数据分组为一个对象:

 Table Schema
 actionId
 key
 value

我在行插入时触发触发器,所以我该如何处理多行插入以及如何收集所有数据。

CREATE TRIGGER attribute_changes
AFTER INSERT
ON attributes
FOR EACH ROW
EXECUTE PROCEDURE log_attribute_changes();

和功能,

 CREATE OR REPLACE FUNCTION wflowr222.log_task_extendedattribute_changes()
RETURNS trigger AS
$BODY$

        DECLARE
        _message json; 
        _extendedAttributes jsonb;

         BEGIN

                SELECT json_agg(tmp) 
                INTO _extendedAttributes
                FROM (
                -- your subquery goes here, for example:
                SELECT attributes.key, attributes.value
                FROM attributes
                WHERE attributes.actionId=NEW.actionId
                ) tmp;

    _message :=json_build_object('actionId',NEW.actionId,'extendedAttributes',_extendedAttributes);

    INSERT INTO wflowr222.irisevents(message)
       VALUES(_message );

       RETURN NULL;
       END;

        $BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

和数据格式为,

actionId    key   value
 2         flag   true
 2         image  http:test.com/image
 2         status New

我尝试通过插入触发器来执行此操作,但是它会在插入的每一行上触发。如果有人对此有任何想法?

我正在尝试编写一个触发器,该触发器从table属性获取数据,该属性一次插入多个与一个actionId对应的行,并将所有数据分组到一个对象中:...

postgresql triggers plpgsql database-trigger eventtrigger
1个回答
0
投票

我希望问题是您正在使用FOR EACH ROW触发器;您可能想要的是FOR EACH STATEMENT触发器-即多行INSERT语句仅触发一次。有关详细说明,请参见https://www.postgresql.org/docs/current/sql-createtrigger.html上的描述。

© www.soinside.com 2019 - 2024. All rights reserved.