• Consistency: garantia de constraints serão seguidas • Isolation: transações não são afetadas por outras transações • Durability: uma transação comitada não será perdida por erros posteriores
is null || (Xmax == my-transaction && Cmax >= my-command))) || (Xmin is committed && (Xmax is null || (Xmax == my-transaction && Cmax >= my-command) || Xmax != my-transaction && Xmax is not committed)))) inserted by the current transaction before this command, and the row has not been deleted, or it was deleted by the current transaction but not before this command, or the row was inserted by a committed transaction, and the row has not been deleted, or the row is being deleted by this transaction but it’s not deleted "yet", or the row was deleted by another transaction that has not been committed
timestamp, é um sequencial • Pode ser obtido com: SELECT txid_current(); • Há vários outros campos para conseguir fazer a “matemágica” de isolamento de uma transação • System Columns: xmin, xmax, cmin, cmax, ctid, oid e tableoid • Outros campos ctid, oid e tableoid não são relevantes para as transações • Porém, ctid nos será útil para demonstração do MVCC
xmax: transação de UPDATE ou DELETE • cmin: sequência do comando dentro da transação associado ao xmin • cmax: sequência do comando dentro da transação associado ao xmax • ctid: localização física de uma linha
nenhuma transação • Não libera espaço em disco • Libera espaço nas pages • Melhora performance • Alta demanda de recursos: processamento e, principalmente, I/O • Não faz parte do Standard SQL • autovacuum daemon
log de transações depois atualiza as pages • COMMIT aguarda flush para memória não-volátil • Recuperação de CRASH através de leitura do log • pg_waldump
não comitada • Non-repeatable read: dados modificados por outra transação comitada • Phatom read: alteração no conjunto de linhas retornadas • Serialization anomaly: instruções das transações estão embaralhadas
não coitadas • Read committed: vê dados de transações comitadas • Repeatable read: vê dados somente de transações anteriores • Serializable: vê cada transação como um conjunto coeso de instruções seriais