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 este sistema, cada consulta acede a uma versão anterior dos dados que se mantém consistente do ponto de vista transacional. 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 é alcançado pelo facto de cada versão de linha ter um valor xmin para a transação visível desde e um valor xmax para a transação visível até. 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 num SGDB são uma unidade atómica de trabalho, portanto, a transação ou é concluída na sua totalidade ou não é executada de todo. As transações também são usadas para fins de concorrência. 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;