Compreender o controle de simultaneidade de várias versões (MVCC) e snapshots
A maioria dos sistemas de gerenciamento de banco de dados (DBMS) usa bloqueios para impor o controle de simultaneidade, mas o PostgreSQL complementa o bloqueio com uma abordagem alternativa. O PostgreSQL usa um sistema chamado Multi-Version Concurrency Control (MVCC) que permite a existência de várias versões da mesma linha para melhorar a simultaneidade. Com esse sistema, cada consulta vê um instantâneo anterior dos dados que é transacionalmente consistente. O MVCC garante que uma transação que está lendo dados não bloqueie uma transação que esteja gravando dados e vice-versa.
Por exemplo, a Conexão A está executando uma consulta que verifica todas as linhas de uma tabela. Ao mesmo tempo, a Conexão B está executando uma consulta que atualiza algumas das linhas. O MVCC permite que ambas as consultas sejam executadas ao mesmo tempo, criando outra versão das linhas afetadas. Desta forma, a Ligação B pode efetuar as atualizações sem afetar a Ligação A. Este processo é conseguido por cada versão de linha com um valor xmin para o visível desde a transação e um valor xmax para o visível até a transação. Com o MVCC, a Conexão A ignorará quaisquer modificações que ocorreram após o início da consulta Conexão A.
Transações
As transações em um SGBD são uma unidade atômica de trabalho, portanto, a transação ou se compromete em sua totalidade ou não é de todo. As transações também são usadas para fins de simultaneidade. Com os níveis de isolamento, o efeito que uma transação pode ter sobre outras transações simultâneas pode ser definido.
Você inicia uma transação com um BEGIN TRANSACTION ou START TRANSACTION. Você conclui uma transação com COMMIT, para salvar todas as alterações feitas na transação, ou ROLLBACK, para desfazer quaisquer alterações feitas pela transação. Por exemplo:
BEGIN TRANSACTION;
UPDATE production.workorder
SET stockedqty=7
WHERE workorderid=1;
COMMIT;