sql >> Databasteknik >  >> RDS >> PostgreSQL

Problem med en PostgreSQL-uppladdningsfråga

UPDATE i den första updated CTE ger ingen rad . Det betyder att du inte får en NULL värde för updated.id antingen. När du går med i updated , får du inget , så ingen INSERT händer heller.

Bör fungera med 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]';

Var medveten om att det fortfarande finns en mycket liten chans för ett racetillstånd under kraftig samtidig belastning. Detaljer under den här relaterade frågan:
Uppsert med en transaktion




  1. Anslagstavla - Databasoptimering

  2. Automatiserad testning av PostgreSQL-säkerhetskopior

  3. Hur gör man en bulkinsert i MySQL?

  4. Hur man skapar en databas i MySQL