| 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
|