Общие сведения об управлении параллелизмом с несколькими версиями (MVCC) и моментальных снимках
Большинство систем управления базами данных (СУБД) использует блокировки для принудительного управления параллелизмом, однако PostgreSQL дополняет блокировку альтернативным подходом. PostgreSQL использует систему с именем "Управление параллелизмом с несколькими версиями" (MVCC), которая позволяет использовать несколько версий одной строки для повышения уровня параллелизма. При использовании этой системы каждый запрос видит предыдущий моментальный снимок данных, согласованных с транзакцией. MVCC гарантирует, что транзакция, которая считывает данные, не блокирует транзакцию, которая записывает данные и наоборот.
Например, подключение A выполняет запрос, который сканирует все строки таблицы. В то же время подключение Б выполняет запрос, который обновляет некоторые строки. MVCC позволяет одновременно выполнять оба запроса, создавая другую версию затронутых строк. Таким образом, подключение B может выполнять обновления, не затрагивая подключение A. Этот процесс достигается каждой версией строки, имеющей значение xmin для транзакции visible since и значение xmax для транзакции visible until. При использовании MVCC Подключение ion A игнорирует любые изменения, произошедшие после запуска запроса Подключение ion A.
Транзакции
Транзакции в СУБД — это атомарная единица работы, поэтому транзакция либо фиксируется полностью, либо вообще не фиксируется вовсе. Транзакции также используются для обеспечения параллелизма. С уровнями изоляции можно определить влияние одной транзакции на другие параллельные транзакции.
Вы запускаете транзакцию с помощью инструкции BEGIN TRANSACTION или START TRANSACTION. Вы выполняете транзакцию с помощью инструкции COMMIT, чтобы сохранить все изменения, внесенные в транзакцию, или инструкции ROLLBACK, чтобы отменить все изменения, внесенные транзакцией. Например:
BEGIN TRANSACTION;
UPDATE production.workorder
SET stockedqty=7
WHERE workorderid=1;
COMMIT;