From: | Diego <mrstephenamell(at)gmail(dot)com> |
---|---|
To: | Horacio Miranda <hmiranda(at)gmail(dot)com>, 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-15 12:01:46 |
Message-ID: | a5db6aeb-ae87-3295-3c48-2cbeb5bb953e@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola,
Lo que yo haria, seria algo tipo RETURNING p.id, p.lastaction asi
podria tener no estaria trasmitiendo lo mismo que inserto o actualizo, y
asi determinaria que le paso a cada registro.
Porque, nunca supe de determinar la accion con el on conflict. y si
Alvaro no lo sabe, no se puede ;P
INSERT INTO public.prueba as p
(prb_id, nombre, lastaction)
SELECT x.prb_id, x.nombre, 'I'
From json_to_recordset(_json) x
(prb_id INTEGER, nombre VARCHAR)
ON CONFLICT (prb_id)
DO UPDATE
SET nombre = EXCLUDED.nombre, lastaction ='U'
RETURNING p.id, p.lastaction
On 14/1/20 18:45, Horacio Miranda wrote:
>
> 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;
>>
>>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Diego | 2020-01-15 12:07:54 | Re: Que tan cierto es sobre este virus de postgresql.. |
Previous Message | Horacio Miranda | 2020-01-15 04:34:52 | Re: Que tan cierto es sobre este virus de postgresql.. |