Eu tenho uma tabela "tst" que possui uma coluna "status" usando a qual processamos registros nessa tabela. Depois que os registros são processados, definimos o status como 'Y';
#\d tst
Table "core.tst"
Column | Type | Modifiers
--------+---------+-----------
id | integer | not null
status | text |
Indexes:
"amn2_pkey" PRIMARY KEY, btree (id)
Problema: no início da transação longa (aproximadamente 20 minutos), tenho 3 registros na tabela tst, conforme mostrado abaixo
#select * from tst;
id | status
----+--------
1 | N
2 | N
3 | N
(3 rows)
Mas durante a transação eu tenho mais alguns registros sendo inseridos na tabela tst, mas eu estava assumindo que esses novos registros não seriam visíveis para a transação atual, mas provaram estar errados no teste.
Sessão 1:
DO $$
BEGIN
perform pg_sleep(20) ;
UPDATE amn2 SET des = 'Y' ;
END $$;
Sessão 2:
INSERT INTO tst VALUES ( 4, 'N');
Poste a Sessão 1, todos os registros foram atualizados para o status 'Y' incluindo o id 4.
Isso é esperado? Ou alguma configuração serializável de banco de dados/tabela está faltando?