PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Usa INSERT... IN CONFLITTO NON FARE NULLA RESTITUZIONE righe non riuscite

Un po' prolisso, ma non mi viene in mente altro:

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;

L'esterno seleziona da tags vede l'istantanea della tabella com'era prima sono stati inseriti i nuovi tag. La terza colonna con la costante serve solo per testare la query in modo da poter identificare quali righe sono state inserite e quali no.