PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres insère une ligne uniquement si le nombre de lignes est inférieur à une limite

Ce problème est connu sous le nom de Phantom Read :

Essayez

BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO mytable (myvalue, mykey) SELECT 'randomvalue', 1 WHERE
    (SELECT COUNT(*) FROM mytable WHERE mykey = 1) < 5;
END;

Le niveau d'isolement des transactions garantira que les transactions n'inséreront des valeurs que si le nombre est inférieur à 5.