Postgresql 使用select Postgres创建函数插入

Postgresql 使用select Postgres创建函数插入,postgresql,function,stored-procedures,Postgresql,Function,Stored Procedures,我需要创建一个函数,从查询中获取数据并将其插入到另一个表中 这是程序 CREATE OR REPLACE FUNCTION public.update_sensor_event_process_t() RETURNS trigger LANGUAGE plpgsql AS $function$ BEGIN INSERT INTO public.sensor_event_process (id_regra, regra, id_veiculo, id_cliente, velo

我需要创建一个函数,从查询中获取数据并将其插入到另一个表中

这是程序

    CREATE OR REPLACE FUNCTION public.update_sensor_event_process_t()
 RETURNS trigger
 LANGUAGE plpgsql
AS $function$   
BEGIN

INSERT INTO public.sensor_event_process (id_regra, regra, id_veiculo, id_cliente, velocidade, odometro, data_posicao, ibutton, latitude, longitude, status)
values 
(NEW.id_regra, NEW.regra, NEW.id_veiculo, NEW.id_cliente, NEW.velocidade, NEW.odometro, NEW.data_posicao, NEW.ibutton, NEW.latitude, NEW.longitude, NEW.status);

DROP TABLE IF EXISTS tmp;

CREATE temporary TABLE tmp AS SELECT DISTINCT re.id_alerta, 
                re.nome_alerta, 
                re.id_tipo_regra, 
                COALESCE(sep.data_posicao, -1) AS data_posicao, 
                sep.velocidade, 
                sep.odometro, 
                sep.latitude, 
                sep.longitude, 
                sep.ibutton, 
                re.id_motorista_responsavel, 
                re.placa_veiculo, 
                re.apelido_veiculo, 
                re.id_cliente,
                re.id_veiculo
FROM            public.rule_event re 
JOIN            public.rule_event re2 
ON              re.id_alerta = re2.id_alerta 
LEFT JOIN       public.sensor_event_process sep 
ON              sep.id_veiculo = re.id_veiculo 
AND             sep.id_regra = re.id_tipo_regra 
AND             sep.data_posicao = new.data_posicao 
WHERE           re.id_veiculo = new.id_veiculo;

DELETE 
FROM   tmp 
WHERE  id_alerta IN 
       ( 
              SELECT id_alerta 
              FROM   tmp 
              WHERE  data_posicao = -1 ) ;

INSERT INTO public.device_event 
            ( 
                        id_device_event, 
                        id_cliente, 
                        id_veiculo, 
                        placa_veiculo, 
                        apelido_veiculo, 
                        id_evento, 
                        id_motorista, 
                        gmt_evento, 
                        nome_motorista, 
                        data_evento, 
                        latitude, 
                        longitude, 
                        ignicao, 
                        velocidade, 
                        ibutton 
            ) 
SELECT nextval('device_event_id_device_event_seq' :: regclass), 
       id_cliente, 
       id_veiculo, 
       placa_veiculo, 
       apelido_veiculo, 
       id_alerta, 
       id_motorista_responsavel, 
       '', 
       '', 
       data_posicao, 
       new.latitude, 
       new.longitude, 
       new.ignicao, 
       new.velocidade, 
       new.ibutton 
FROM   tmp;
DROP TABLE IF EXISTS tmp;

 select pipeline_kafka.produce_message('topicNotificationProcess', (select '{"eventSummary":' || Row_to_json(q)::text  || '}'
FROM   (SELECT * 
        FROM   public.device_event 
        ORDER  BY 1 DESC 
        LIMIT  1) AS q )::bytea  );


RETURN new;
结束; $function$

但数据库返回错误:

错误:查询没有结果数据的目标提示:如果要 放弃选择的结果,改用执行。背景: PL/pgSQL函数更新\传感器\事件\进程\在SQL的第77行 语句:传感器\事件\过程\转换


如果不想将所选数据存储到变量中,则必须使用“执行”:

 PERFORM pipeline_kafka.produce_message('topicNotificationProcess', (select '{"eventSummary":' || Row_to_json(q)::text  || '}'
FROM   (SELECT * 
        FROM   public.device_event 
        ORDER  BY 1 DESC 
        LIMIT  1) AS q )::bytea  );

我的回答对你有帮助吗?