PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres fügt Zeile nur ein, wenn die Anzahl der Zeilen unter einem Limit liegt

Dieses Problem ist als Phantom Read bekannt :

Versuchen Sie es

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

Die Transaktionsisolationsstufe stellt sicher, dass Transaktionen nur dann Werte einfügen, wenn die Anzahl kleiner als 5 ist.