Транзакция задаёт единицу работы и её границы. Атомарность — требование к результату внутри этих границ: транзакционные изменения принимаются вместе либо отменяются. Перечень вызовов функции ещё не определяет такую границу для внешних систем.
Почему это важно
При оформлении заказа нужно создать заказ и уменьшить доступный остаток. Если второй шаг не удался, первый не должен остаться отдельным успешным результатом. Сначала установите границу этих изменений в базе, затем отдельно разберите оплату, письмо покупателю и публикацию сообщения: общий обработчик запроса не объединяет их автоматически.
Что подтверждено
Транзакция группирует чтения и изменения связанных данных в одну управляемую единицу. В PostgreSQL 18 явный блок начинается с BEGIN, завершается COMMIT при принятии результата или ROLLBACK при отмене изменений.
Граница применимости: Общая модель транзакции и явный блок SQL в PostgreSQL 18; поведение обёртки или клиентской библиотеки проверяют отдельно.
Локальная транзакция базы не включает внешний платёж, письмо или HTTP-вызов только потому, что приложение выполнило их между BEGIN и COMMIT. Если внешняя система не участвует в общей транзакции, её выполненное действие требует отдельной координации или компенсации.
Граница применимости: Редакторское сопоставление локальной транзакции с независимым внешним эффектом; не утверждение о возможностях конкретного платёжного API.
В PostgreSQL 18 отдельная SQL-команда без общего блока транзакции выполняется в собственной транзакции. Поэтому успешная запись заказа и следующая неудачная команда изменения остатка могут дать частичный результат, если клиент не объединил их в один блок.
Граница применимости: PostgreSQL 18: две отдельно отправленные команды без BEGIN и без неявного объединения клиентской библиотекой. Пример заказа — применение правила автоматической фиксации.
Для заказа с двумя связанными изменениями проверка отката должна прервать выполнение после первого изменения, но до фиксации. После завершённого ROLLBACK в транзакционных таблицах не должны оставаться ни новый заказ, ни уменьшенный этим заказом остаток.
Граница применимости: Редакторский приёмочный сценарий для одной локальной транзакции; обе операции принадлежат ей, исходное состояние известно, внешние эффекты исключены.
В PostgreSQL 18 точка сохранения SAVEPOINT позволяет отменить изменения после неё командой ROLLBACK TO и продолжить ту же транзакцию. Изменения до точки сохраняются внутри незавершённой транзакции; окончательное решение по ним всё ещё требует COMMIT или полного ROLLBACK.
Граница применимости: Точки сохранения явного блока транзакции PostgreSQL 18; точка сохранения сама не фиксирует результат.
Общий BEGIN задаёт границу транзакции, но сам по себе не закрепляет один снимок данных на все чтения. В PostgreSQL 18 на Read Committed два обычных SELECT могут увидеть изменение, которое другая транзакция зафиксировала между ними.
Граница применимости: PostgreSQL 18, Read Committed, обычные последовательные SELECT без собственных изменений выбранной строки.
Не путать
Локальный блок SQL управляет своей транзакцией. Двухфазная фиксация согласует решение нескольких участников через подготовку и последующее решение координатора. Она требует поддержки участников; обычное письмо или произвольный HTTP-вызов участником не становятся.
Что проверить
- Нарисуйте одну операцию заказа: чтение цены, проверка остатка, создание заказа, резерв, оплата и уведомление.
- Отметьте, какие изменения входят в один блок базы и одно соединение, а какие выполняются независимо.
- Проверьте режим автоматической фиксации драйвера и реальные команды начала и завершения транзакции.
- Прервите тест после записи заказа до изменения остатка, выполните откат и сверяйте обе таблицы.
- Повторите сценарий с точкой сохранения: отдельно проверьте сохранённую и отменённую части транзакции.
- Запустите второй сеанс между двумя чтениями первого и сопоставьте результат с выбранным уровнем изоляции.
- Для уже выполненной оплаты или отправленного письма укажите самостоятельный способ выяснить результат и исправить частичное выполнение.
Первоисточники
The Transaction Model — Turing Award Lecture
Microsoft Research / ACM · Jim Gray, FCRC 1999 lecture slides
Первичный обзор transaction model, ACID, concurrency anomalies, logs и two-phase commit.
Открыть первоисточникPostgreSQL 18 Documentation: Transactions
PostgreSQL Global Development Group · документация PostgreSQL 18, страница открыта 7 сентября 2026 года
Открыт редактором 7 сентября 2026 года, заголовок документа сверен. Проверить границы BEGIN/COMMIT/ROLLBACK, отдельные транзакции без BEGIN, точки сохранения и оговорку о поведении клиентских библиотек.
Открыть первоисточникPostgreSQL 18 Documentation: PREPARE TRANSACTION
PostgreSQL Global Development Group · PostgreSQL 18 SQL command reference
Описывает prepared transaction, external transaction manager и operational risk forgotten prepared state.
Открыть первоисточникPostgreSQL 18 Documentation: Transaction Isolation
PostgreSQL Global Development Group · PostgreSQL 18, Chapter 13.2
Определяет isolation phenomena и фактическое поведение PostgreSQL levels, включая Serializable.
Открыть первоисточник