PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Използвайте INSERT ... ПРИ КОНФЛИКТ НЕ ПРАВЕТЕ НИЩО ВРЪЩАНЕ на неуспешни редове

Малко многословно, но не се сещам за нищо друго:

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;

Външният избор от tags вижда моментната снимка на таблицата, както е била преди новите тагове бяха вмъкнати. Третата колона с константата е там само за тестване на заявката, така че човек да може да идентифицира кои редове са били вмъкнати и кои не.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добри практики за сигурност на PostgreSQL

  2. psycopg2 E' на таблица, поле и схема

  3. Heroku Rails 4 не можа да се свърже със сървъра:връзката е отказана

  4. ILIKE Съвпадение на границите на думите PostgreSQL 9

  5. Продължавам да получавам връзката за грешка [TABLE] не съществува