Re: saber que filas se actualizaron o insertaron con upsert

From: Horacio Miranda <hmiranda(at)gmail(dot)com>
To: mauricio pullabuestan <jmauriciopb(at)yahoo(dot)es>, Postgres ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: saber que filas se actualizaron o insertaron con upsert
Date: 2020-01-14 21:45:57
Message-ID: f652b440-b4d3-c5b9-d991-a8917685d41c@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


On 15/01/2020 10:41 am, mauricio pullabuestan wrote:
> Buen día
>
> Tengo una tabla a la cual envió un json para insertar o actualizar registros, me interesa mediante returing insertar en una tabla temporal los registros afectados y de alguna forma poder distinguir cuales se insertaron o actualizaron para poder interactuar después.
>
> Alguna idea de como hacerlo?

Yo haría un merge y con un trigger en un update insertar en una tabla de
updates y otro trigger insertar los datos nuevos ( eso es lo que quieres
? ).

Claro debe ser un after para no agregar latencia en la transacción.

>
> dejo un scrip de como estoy haciéndolo
>
> Saludos.
> Mauricio
>
> do $$
> DECLARE _json json;
>
> BEGIN
>
> _json = '[{"prb_id":1,"nombre":"iten existe"},{"prb_id":2,"nombre":"iten No existe"}]';
>
> CREATE TEMP TABLE _rs On COMMIT DROP
> As
> WITH t
> AS
> (
> INSERT INTO public.prueba as p
> (prb_id, nombre)
> SELECT x.prb_id, x.nombre
>  From json_to_recordset(_json) x
>       (prb_id INTEGER, nombre VARCHAR)
> ON CONFLICT (prb_id)
>      DO UPDATE
>         SET nombre = EXCLUDED.nombre
> RETURNING p.*
> )
> Select *
>  From t;
>
> /*
> Interactuar con registros nuevos
>
> Interactuar con registros editados
> */
>
> END
> $$;
>
> Select *
>  From _rs;
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message mauricio pullabuestan 2020-01-14 21:47:29 Re: saber que filas se actualizaron o insertaron con upsert
Previous Message mauricio pullabuestan 2020-01-14 21:45:19 Re: saber que filas se actualizaron o insertaron con upsert