linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it worksскоро
  • Уроки
  • База знаний
  • Собеседование
home/postgres/lessons/pg-lab-09-1-two-sessions

lesson ── postgres-labs ── ~22 мин ── 4 шагов

Увидь многоверсионность на двух сессиях

Открыты две сессии к одной базе - вкладки A и B. Увидь многоверсионность в действии: сессия B не видит незакоммиченных изменений сессии A. Перед каждым чтением в B предсказывай, какое значение она покажет.

▶ интерактивный sandbox

Поднимется контейнер postgreslab/postgres-base с PostgreSQL 17 и psql. В браузере откроется терминал, база lab уже настроена. Каждый шаг проверяется автоматически. Сеть air-gapped, наружу контейнер не ходит.

запустить sandbox →

stack ── PostgreSQL 17 · psql · 1 GB RAM · air-gapped · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Сессия A: начни транзакцию и измени бронь

    Перейди во вкладку A. Начни транзакцию и измени бронь, но не коммить. Обрати внимание на звёздочку в приглашении lab=*# - идёт транзакция.

    sql
    BEGIN;
    UPDATE bookings SET total = 999 WHERE book_ref = '000001';
    подсказка

    Не коммить - пусть транзакция остаётся открытой.

    ✓ Транзакция A открыта и держит незакоммиченное изменение.

  2. 02

    Сессия B: прочитай ту же бронь

    Перейди во вкладку B. Предскажи: что покажет чтение прямо сейчас, пока A не закоммитила?

    sql
    SELECT total FROM bookings WHERE book_ref = '000001';
    подсказка

    Незакоммиченное изменение видно только той сессии, что его сделала.

    ✓ B видит старое значение 101.00 - изменения A ей не видны.

  3. 03

    Сессия A: зафиксируй

    Вернись во вкладку A и заверши транзакцию. Звёздочка в приглашении пропадёт.

    sql
    COMMIT;

    ✓ Транзакция зафиксирована, новая версия теперь общедоступна.

  4. 04

    Сессия B: прочитай снова

    Вернись во вкладку B. Предскажи, что покажет повторное чтение теперь, после коммита A.

    sql
    SELECT total FROM bookings WHERE book_ref = '000001';

    ✓ Теперь B видит 999.00 - после коммита новая версия видна всем.

Что ты узнал

Многоверсионность на двух сессиях: пока A держала незакоммиченную запись, B видела старую версию и не ждала. После COMMIT новая версия стала видна всем. Читатель и писатель не блокировали друг друга.

команды

  • BEGIN; UPDATE ...;открыть транзакцию и изменить строку
  • SELECT ... FROM bookings;чтение видит свою версию
  • COMMIT;сделать новую версию общедоступной

концепции

  • · незакоммиченное изменение видно только сделавшей его сессии
  • · читатель видит старую версию и не ждёт писателя
  • · звёздочка в приглашении lab=*# означает открытую транзакцию

← предыдущая

Найди, где живёт большой текст

следующая →

Заморозь снимок на Repeatable Read

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки