Citação de documentos:
Read Committed é o nível de isolamento padrão no PostgreSQL. Quando uma transação usa esse nível de isolamento, uma consulta SELECT (sem uma cláusula FOR UPDATE/SHARE) vê apenas os dados confirmados antes do início da consulta; ele nunca vê dados não confirmados ou alterações confirmadas durante a execução da consulta por transações simultâneas . Na verdade, uma consulta SELECT vê um instantâneo do banco de dados no instante em que a consulta começa a ser executada. No entanto, SELECT vê os efeitos de atualizações anteriores executadas em sua própria transação, mesmo que ainda não tenham sido confirmadas. Observe também que dois comandos SELECT sucessivos podem ver dados diferentes, mesmo que estejam dentro de uma única transação, se outras transações cometerem alterações durante a execução do primeiro SELECT .
Então, o PostgreSQL vê as alterações confirmadas por outras transações ou não?
A diferença está entre uma consulta e uma transação. Uma transação pode conter qualquer número de consultas. Para ilustrar a diferença, montei um pequeno exemplo:
Em seguida, execute duas transações simultaneamente (emitindo os comandos um por um, a linha do meio deseja representar a linha do tempo):
Executando-os em
READ COMMITTED
nível de isolamento, a primeira consulta retorna uma linha com 'old_value', enquanto a segunda mostra uma linha com 'new_value'. Em outra execução, altero o nível de isolamento da transação do lado esquerdo:(O comando deve ser a primeira instrução em uma transação.) Agora, ambos os SELECTs retornam o mesmo conjunto de linhas, enquanto um terceiro após confirmar ambas as transações mostrará a nova linha.
Sim. A primeira frase que você marcou em negrito refere-se a "transações simultâneas", ou seja, transações que alteram dados, mas que não são confirmadas enquanto sua transação ainda está em andamento. Se essas transações simultâneas forem confirmadas antes das suas, você verá os dados delas em sua transação em seleções sucessivas.