PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Użyj INSERT ... ON CONFLICT NIC NIE ZWRACAJ nieudanych wierszy

Trochę gadatliwy, ale nie przychodzi mi do głowy nic innego:

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;

Wybierz zewnętrzny z tags widzi migawkę tabeli taką, jaka była przed wstawiono nowe znaczniki. Trzecia kolumna ze stałą służy tylko do testowania zapytania, aby można było określić, które wiersze zostały wstawione, a które nie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. initdb:nie można zmienić uprawnień katalogu w kontenerze Postgresql

  2. Błąd SSL Postgresa

  3. Instalacja PostgreSQL na Ubuntu dla Ruby on Rails

  4. Jak wygenerować losowy, unikalny, alfanumeryczny identyfikator o długości N w Postgresie 9.6+?

  5. PostgreSQL:Jak połączyć tabele 3 posortowane według daty