Стенд для лабораторных
Локальный PostgreSQL 17 в Docker с учебными данными. Только для экспериментов: никаких рабочих баз, дампов и данных заказчиков.
Запуск
Нужен Docker Desktop. Из папки 02-postgresql/labs:
docker compose up -d
docker compose logs -f db # дождаться "database system is ready to accept connections"
Первый старт занимает около минуты: скрипт init/01-seed.sql создаёт таблицы и генерирует миллион заказов.
Подключение
В каждой лабораторной нужны две или три сессии одновременно. Откройте несколько терминалов и в каждом выполните:
docker compose exec db psql -U study study
Или подключитесь любым клиентом (DBeaver, DataGrip, VS Code): localhost:55432, база study, пользователь и пароль study. В графических клиентах отключите автокоммит, иначе BEGIN будет вести себя неожиданно.
Полезно в каждой сессии задать своё приглашение, чтобы не путаться:
\set PROMPT1 'A %/=# ' -- во второй сессии 'B %/=# ', в третьей 'C %/=# '
Что лежит в базе
| Таблица | Строк | Для чего |
|---|---|---|
accounts |
2 | Лаба 1: lost update, non-repeatable read |
doctors |
2 | Лаба 1: write skew |
tasks |
20 | Лаба 2: очередь на SKIP LOCKED |
customers |
100 000 | Лаба 3: соединения. 1% клиентов — VIP |
cities |
20 | Справочник: город однозначно определяет регион |
orders |
1 000 000 | Лаба 3: статусы распределены 95% DONE, 4% CANCELLED, 1% NEW; город и регион коррелированы; created_at растёт вместе с id |
Сброс
docker compose down -v # удалит том с данными
docker compose up -d # создаст всё заново