PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres insere linha apenas se a contagem de linhas estiver abaixo de um limite


Esse problema é conhecido como Phantom Read :

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

O nível de isolamento da transação garantirá que as transações apenas insiram valores se a contagem for menor que 5.