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

Problemer med en PostgreSQL-upsert-forespørgsel

UPDATE i den første updated CTE producerer ingen række . Det betyder, at du ikke får en NULL værdi for updated.id enten. Når du tilmelder dig updated , får du intet , så ingen INSERT sker enten.

Bør fungere 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]';

Vær opmærksom på, at der stadig er en meget lille chance for en løbstilstand under kraftig samtidig belastning. Detaljer under dette relaterede spørgsmål:
Opret med en transaktion




  1. MariaDB CONNECTION_ID() Forklaret

  2. Nye og udviklende PostgreSQL Enterprise-funktioner med seneste udgivelser

  3. strapi database.js / flere databasekonfigurationer

  4. Opret underkategorivalgsboks ved Skift