BEGIN
Начало отложенного транзакционного блока.
Синтаксис:
BEGIN [ WORK | TRANSACTION ]
Параметры:
Необязательные ключевые слова, делающие команду SQL более наглядной.
Результаты:
- BEGIN. Сообщение выдается в начале транзакции.
- NOTICE: BEGIN: already transaction in progress. Сообщение выдается в том случае, если в сеансе PostgreSQL уже имеется незавершенная транзакция (вложение транзакций в PostgreSQL не допускается). Состояние текущей незавершенной транзакции при этом не изменяется.
Описание
По умолчанию транзакции PostgreSQL выполняются в непосредственном режиме (также называемом режимом с автоматической фиксацией). В этом режиме для каждой команды пользователя автоматически создается отдельная транзакция, которая либо автоматически фиксируется в базе данных, либо откатывается в зависимости от результата выполнения команды.
Команда BEGIN сообщает серверу о создании транзакционного блока в отложенном режиме. В этом режиме команды, передаваемые серверу, сохраняются в очереди до получения сервером команды COMMIT. Также возможен откат транзакции по команде ROLLBACK или при неожиданном отключении пользователя от базы данных.
Отложенный режим часто используется при работе с несколькими взаимосвязанными таблицами, а также для повышения общей эффективности операций с базой данных. Выполнение команд в отложенном режиме снижает затраты ресурсов процессора и дискового пространства, поскольку на каждый блок команд используется только одна операция его фиксации.
При фиксации транзакции сервер пытается выполнить все обновления, входящие в нее. При отсутствии ошибок обновление проходит успешно, в противном случае весь транзакционный блок откатывается.
Пример
Следующий код начинает транзакцию и создает таблицу, после чего транзакция фиксируется в базе данных:
booktown=# BEGIN WORK; BEGIN booktown=# CREATE TABLE test (id integer, name text); CREATE booktown=# COMMIT WORK; COMMIT