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

Проблеми с PostgreSQL upsert заявка

UPDATE в първия CTE updated произвежда без ред . Това означава, че не получавате NULL стойност за updated.id или. При присъединяване към updated , не получавате нищо , така че няма INSERT се случва или.

Трябва да работи с NOT EXISTS :

WITH updated AS (
   UPDATE vote_user_table v
   SET    positive = TRUE       -- use booleann values ..
         ,negative = FALSE      -- .. instead of quoted string literals
   FROM   usuario u
   WHERE  v.review_id = 6       -- guessing origin
   AND    v.user_id = u.id
   AND    u.username ILIKE '[email protected]'
   RETURNING v.id
   )
INSERT INTO vote_user_table (review_id, user_id, positive, negative)
SELECT 6, u.id, TRUE, FALSE
FROM   usuario u
WHERE NOT EXISTS (SELECT 1 FROM updated)
AND    u.username ILIKE '[email protected]';

Имайте предвид, че все още има много малък шанс за състезание при голямо едновременно натоварване. Подробности под този свързан въпрос:
Upsert с транзакция




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 съпоставяне Python:списък на dicts към Postgres:масив от съставен тип за оператор INSERT

  2. Размер на таблицата на дяловете в PostgreSQL 9.0

  3. В таблицата на PostgresQL, как да създадете колона с всички стойности в колона1, за която стойността на текущия ред в колона1 се появява в колона2?

  4. node-postgres UTF грешка в паролата

  5. Създайте масив за стойности от списък с колони, извлечени в Postgres