On 3/3/21 2:35 PM, Fontana Daniel C. (Desartec S.R.L.) wrote:
Using postgres 12.5 in DBA schema, this trigger is executed when the table
is updated through a logical replication. Why is it necessary to name the
schema for it to work?

Because the search_path does include the schema?

When I update the table manually, if it Works.

Example.

This trigger function does not work

CREATE FUNCTION dba.ft_pos_sync_eco_tx()
     RETURNS trigger
     LANGUAGE 'plpgsql'
     COST 100
     VOLATILE NOT LEAKPROOF
AS $BODY$
begin
        INSERT INTO pos_sync_eco_rx
                  (     id_terminales,
                        fecha_y_hora_tx,
                        fecha_y_hora_rx,
                                dato,
                        usuario,
                        fecha_y_hora_proceso )
          VALUES (      new.id_terminales,
                        localtimestamp,
                        localtimestamp,
                                new.dato,
                        new.usuario ,
                        localtimestamp )
        ON CONFLICT (id_terminales)
        DO UPDATE SET (fecha_y_hora_tx,
                                   fecha_y_hora_rx,
                                   dato,
                                   usuario,
                                   fecha_y_hora_proceso ) =
                                  (new.fecha_y_hora_tx,
                                   localtimestamp,
                                   new.dato,
                                   new.usuario,
                                   new.fecha_y_hora_proceso );
                                
        return  new;
        
end
$BODY$;

This trigger function, if it works

CREATE FUNCTION dba.ft_pos_sync_eco_tx()
     RETURNS trigger
     LANGUAGE 'plpgsql'
     COST 100
     VOLATILE NOT LEAKPROOF
AS $BODY$
begin
        INSERT INTO dba.pos_sync_eco_rx
                  (     id_terminales,
                        fecha_y_hora_tx,
                        fecha_y_hora_rx,
                                dato,
                        usuario,
                        fecha_y_hora_proceso )
          VALUES (      new.id_terminales,
                        localtimestamp,
                        localtimestamp,
                                new.dato,
                        new.usuario ,
                        localtimestamp )
        ON CONFLICT (id_terminales)
        DO UPDATE SET (fecha_y_hora_tx,
                                   fecha_y_hora_rx,
                                   dato,
                                   usuario,
                                   fecha_y_hora_proceso ) =
                                  (new.fecha_y_hora_tx,
                                   localtimestamp,
                                   new.dato,
                                   new.usuario,
                                   new.fecha_y_hora_proceso );
                                
        return  new;
        
end
$BODY$;




--
Adrian Klaver
adrian.kla...@aklaver.com


Reply via email to