sql >> Base de Datos >  >> RDS >> PostgreSQL

Usar INSERTAR... EN CONFLICTO NO HACER NADA DEVOLVER filas fallidas

Un poco detallado, pero no se me ocurre nada más:

with all_tags (name) as (
  values ('tag10'), ('tag6'), ('tag11')
), inserted (id, name) as (
   INSERT INTO tags (name)
   select name 
   from all_tags
   ON CONFLICT DO NOTHING 
   returning id, name
)
select t.id, t.name, 'already there'
from tags t
  join all_tags at on at.name = t.name
union all
select id, name, 'inserted'
from inserted;

La selección externa de tags ve la instantánea de la tabla como era antes se insertaron las nuevas etiquetas. La tercera columna con la constante solo está ahí para probar la consulta para que uno pueda identificar qué filas se insertaron y cuáles no.