Este capítulo descreve o comportamento do sistema de gerenciamento de banco de dados PostgreSQL quando duas ou mais sessões tentam acessar os mesmos dados ao mesmo tempo. O objetivo nesta situação é permitir acesso eficiente para todas as sessões mantendo, ao mesmo tempo, uma rigorosa integridade dos dados. Todos os desenvolvedores de aplicativos de banco de dados devem estar familiarizados com os tópicos cobertos por este capítulo.
Diferentemente dos sistemas gerenciadores de banco de dados tradicionais, que usam bloqueios para controlar a simultaneidade, o PostgreSQL mantém a consistência dos dados utilizando o modelo multiversão (Multiversion Concurrency Control, MVCC). Isto significa que, ao consultar o banco de dados cada transação enxerga um instantâneo (snapshot) dos dados (uma versão do banco de dados) como estes eram há um tempo atrás, sem levar em consideração o estado corrente dos dados subjacentes. Este modelo protege a transação contra enxergar dados inconsistentes, o que poderia ser causado por atualizações feitas por transações simultâneas nas mesmas linhas de dados, fornecendo um isolamento da transação para cada sessão do banco de dados.
A principal vantagem de utilizar o modelo de controle de simultaneidade MVCC em vez de bloqueios é que, no MVCC os bloqueios obtidos para consultar dados (leitura) não conflitam com os bloqueios obtidos para escrever dados e, portanto, a leitura nunca bloqueia a escrita, e a escrita nunca bloqueia a leitura.
Também estão disponíveis no PostgreSQL as funcionalidades de bloqueio no nível de tabela e de linha, para aplicativos que não podem se adaptar facilmente ao comportamento MVCC. Entretanto, a utilização apropriada do MVCC geralmente produz um desempenho melhor que os bloqueios.