Модуль 9 · Урок 36
Transactions, isolation і safe read-only evidence
Data QA має розрізняти committed state, statement/transaction snapshot та concurrency anomaly — і водночас працювати з least privilege, bounded queries та redacted evidence.
Transaction boundary визначає observation
Transaction групує statements до COMMIT або ROLLBACK. Autocommit робить кожний statement окремою transaction. Для test case запишіть precondition, Session A/B steps, barriers, isolation level, expected visible state і cleanup. ACID — корисна модель, але конкретний oracle походить із database semantics та application invariant.
| PostgreSQL level | Практичне спостереження |
|---|---|
| READ COMMITTED | Кожний statement отримує snapshot на початок statement; два SELECT у transaction можуть побачити різні committed data. |
| REPEATABLE READ | Transaction зберігає стабільніший snapshot; conflicting update може вимагати retry. |
| SERIALIZABLE | Має ефект serial execution для успішних transactions; serialization failure є очікуваним retry signal. |
У PostgreSQL READ UNCOMMITTED поводиться як READ COMMITTED — це важлива engine-specific detail, а не універсальне правило SQL.
Safe read-only posture
- Окремий account із SELECT лише на погоджені views/tables і мінімальним retention.
- Transaction `READ ONLY`, коли підтримується, але також ручний review query.
- Не використовувати `SELECT … FOR UPDATE`, data-changing CTE, functions із side effects або `EXPLAIN ANALYZE` без дозволу.
- Explicit columns, filters, deterministic order, row/time limits та query cancellation plan.
- Жодних secrets/PII у CSV, screenshots, logs або portfolio; redact мінімально достатній доказ.
READ ONLY не означає cheap
Великий scan або bad join може створити load без зміни даних. Scope, plan review, timeout, off-peak window і replica policy погоджуються з owner.
Evidence має бути reproducible
Збережіть purpose/query hash, schema/release version, database role class (не credential), isolation/timezone, start/end UTC, row count, expected/observed, redacted sample і limitation. Не видавайте local synthetic result за production finding.
Invariant + exact snapshot/scope + reproducible query + expected vs observed + impact + redacted evidence + owner + retest result.
Практика
У двох локальних sessions виконайте сценарії з `transaction-isolation-observations.csv`. Заповніть `safe-sql-checklist.csv`, перевірте, що QA checks містять тільки SELECT/WITH, і додайте limitation про synthetic data.
Модуль 9 завершено
Після тесту прогрес стане 36/36 уроків. Фінал і PDF-сертифікат лишаються закритими до 44 уроків та трьох accepted projects.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.