13.1. Ðведение
PostgreSQL пÑедоÑÑавлÑÐµÑ ÑазÑабоÑÑикам богаÑÑй Ð½Ð°Ð±Ð¾Ñ ÑÑедÑÑв Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÐºÑÑенÑнÑм доÑÑÑпом к даннÑм. ÐнÑÑÑи он поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑелоÑÑноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑеализÑÑ Ð¼Ð¾Ð´ÐµÐ»Ñ MVCC (Multiversion Concurrency Control, ÐноговеÑÑионное ÑпÑавление конкÑÑенÑнÑм доÑÑÑпом). ÐÑо ознаÑаеÑ, ÑÑо каждÑй SQL-опеÑаÑÐ¾Ñ Ð²Ð¸Ð´Ð¸Ñ Ñнимок даннÑÑ (веÑÑÐ¸Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ) на опÑеделÑннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени, вне завиÑимоÑÑи Ð¾Ñ ÑекÑÑего ÑоÑÑоÑÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÑо заÑиÑÐ°ÐµÑ Ð¾Ð¿ÐµÑаÑоÑÑ Ð¾Ñ Ð½ÐµÑоглаÑованноÑÑи даннÑÑ , возможной, еÑли дÑÑгие конкÑÑиÑÑÑÑие ÑÑанзакÑии внеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² Ñе же ÑÑÑоки даннÑÑ , и обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ñем ÑамÑм изолÑÑÐ¸Ñ ÑÑанзакÑий Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеанÑа баз даннÑÑ . MVCC, оÑÑ Ð¾Ð´Ñ Ð¾Ñ Ð¼ÐµÑодик блокиÑованиÑ, пÑинÑÑÑÑ Ð² ÑÑадиÑионнÑÑ Ð¡Ð£ÐÐ, ÑÐ½Ð¸Ð¶Ð°ÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ ÐºÐ¾Ð½ÑликÑов блокиÑовок и Ñаким обÑазом обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð±Ð¾Ð»ÐµÐµ вÑÑокÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð² многополÑзоваÑелÑÑкой ÑÑеде.
ÐÑновное пÑеимÑÑеÑÑво иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ»Ð¸ MVCC по ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð±Ð»Ð¾ÐºÐ¸Ñованием заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо блокиÑовки MVCC, полÑÑеннÑе Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , не конÑликÑÑÑÑ Ñ Ð±Ð»Ð¾ÐºÐ¸Ñовками, полÑÑеннÑми Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи, и поÑÑÐ¾Ð¼Ñ ÑÑение никогда не меÑÐ°ÐµÑ Ð·Ð°Ð¿Ð¸Ñи, а запиÑÑ ÑÑениÑ. PostgreSQL гаÑанÑиÑÑÐµÑ ÑÑо даже Ð´Ð»Ñ Ñамого ÑÑÑогого ÑÑÐ¾Ð²Ð½Ñ Ð¸Ð·Ð¾Ð»ÑÑии ÑÑанзакÑий, иÑполÑзÑÑ Ð¸Ð½Ð½Ð¾Ð²Ð°ÑионнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¸Ð·Ð¾Ð»ÑÑии SSI (Serializable Snapshot Isolation, СеÑиализÑÐµÐ¼Ð°Ñ Ð¸Ð·Ð¾Ð»ÑÑÐ¸Ñ Ñнимков).
ÐÐ»Ñ Ð¿Ñиложений, коÑоÑÑм в пÑинÑипе не нÑжна Ð¿Ð¾Ð»Ð½Ð°Ñ Ð¸Ð·Ð¾Ð»ÑÑÐ¸Ñ ÑÑанзакÑий и коÑоÑÑе пÑедпоÑиÑаÑÑ Ñвно опÑеделÑÑÑ ÑоÑки конÑликÑов, в PostgreSQL Ñакже еÑÑÑ ÑÑедÑÑва блокиÑовки на ÑÑовне ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ ÑÑÑок. Ðднако пÑи пÑавилÑном иÑполÑзовании MVCC обÑÑно обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, Ñем блокиÑовки. ÐÑоме ÑÑого, пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ ÑекомендаÑелÑнÑе блокиÑовки, не пÑивÑзаннÑе к какой-либо одной ÑÑанзакÑии.