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

Brug INSERT ... VED KONFLIKT GØR INGENTING RETURERER mislykkede rækker

Lidt ordrigt, men jeg kan ikke komme i tanke om andet:

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;

Den ydre vælger fra tags ser øjebliksbilledet af tabellen, som det var før de nye tags blev indsat. Den tredje kolonne med konstanten er der kun for at teste forespørgslen, så man kan identificere, hvilke rækker der blev indsat og hvilke der ikke.



  1. Sådan repareres forældet oracle.sql.ArrayDescriptor, oracle.sql.STRUCT og oracle.sql.StructDescriptor

  2. Hvordan udvikler man en efter-serverror-trigger i Oracle?

  3. Hvordan specificerer man den primære nøgleseed for en postgres-tabel?

  4. PostgreSQL Logical Replication Gotchas