×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.158. PREPARE TRANSACTION

6.1.158. PREPARE TRANSACTION

PREPARE TRANSACTION — подготовка текущей транзакции к двухфазной фиксации

Синтаксис

PREPARE TRANSACTION transaction_id

Описание

PREPARE TRANSACTION подготавливает текущую транзакцию к двухфазной фиксации. После выполнения этой команды транзакция больше не связана с текущим сеансом; вместо этого её состояние полностью сохраняется на диске, и существует очень высокая вероятность того, что она может быть успешно зафиксирована, даже если произойдет сбой базы данных до запроса фиксации.

Подготовленную транзакцию можно зафиксировать или откатить позже с помощью команд COMMIT PREPARED или ROLLBACK PREPARED, соответственно. Эти команды могут быть выполнены из любого сеанса, а не только из того, в котором была запущена исходная транзакция.

С точки зрения сеанса, выполняющего команду, PREPARE TRANSACTION фактически не отличается от ROLLBACK команда: после её выполнения текущая транзакция перестаёт быть активной, а изменения, внесённые подготовленной транзакцией, становятся невидимыми. (Изменения снова станут видимыми в случае фиксации транзакции.)

Если PREPARE TRANSACTION команда завершается ошибкой по любой причине, она превращается в ROLLBACK: текущая транзакция отменяется.

Параметры

transaction_id

Произвольный идентификатор, используемый в дальнейшем для идентификации данной транзакции при COMMIT PREPARED или ROLLBACK PREPARED. Идентификатор должен быть записан в виде строкового литерала и иметь длину менее 200 байт. Он не должен совпадать с идентификатором любой другой активной в данный момент подготовленной транзакции.

Примечания

PREPARE TRANSACTION не предназначена для использования в приложениях или интерактивных сеансах. Данная команда предназначена для того, чтобы внешний менеджер транзакций мог выполнять атомарные глобальные транзакции в нескольких базах данных или других транзакционных ресурсах. Если вы не разрабатываете менеджер транзакций, вам, скорее всего, не следует использовать PREPARE TRANSACTION.

Эта команда должна использоваться внутри блока транзакции. Используйте BEGIN для её запуска.

В настоящее время не разрешается выполнять PREPARE транзакции, в которой выполнялись какие-либо операции с временными таблицами или временным пространством имён сеанса, создавались курсоры WITH HOLD, или выполнялись команды LISTEN, UNLISTEN, или NOTIFY. Данные функции слишком тесно связаны с текущим сеансом, чтобы их можно было использовать в подготавливаемой транзакции.

Если в транзакции изменялись какие-либо параметры времени выполнения с помощью SET (без опции LOCAL ), эти изменения сохраняются после выполнения команды PREPARE TRANSACTION, и не будут затронуты последующим COMMIT PREPARED или ROLLBACK PREPARED. Таким образом, в этом отношении PREPARE TRANSACTION действует скорее как COMMIT чем ROLLBACK.

Все доступные в данный момент подготовленные транзакции перечислены в pg_prepared_xacts системном представлении.

Внимание

Не рекомендуется оставлять транзакции в подготовленном состоянии на длительное время. Это будет препятствовать работе VACUUM по освобождению места на диске, а в исключительных случаях может привести к остановке базы данных для предотвращения зацикливания идентификаторов транзакций (см. Раздел 3.9.1.5). Также имейте в виду, что транзакция продолжает удерживать все установленные ею блокировки. Предполагаемое использование данной функции заключается в том, что подготовленная транзакция обычно фиксируется или откатывается, как только внешний менеджер транзакций подтвердит, что другие базы данных также готовы к фиксации.

Если вы не настроили внешний менеджер транзакций для отслеживания подготовленных транзакций и обеспечения их своевременного завершения, рекомендуется оставить функциональность подготовленных транзакций отключенной, установив max_prepared_transactions нулю. Это предотвратит случайное создание подготовленных транзакций, которые могут быть впоследствии забыты и в конечном итоге стать причиной проблем.

Примеры

Подготовка текущей транзакции для двухфазной фиксации с использованием foobar в качестве идентификатора транзакции:

PREPARE TRANSACTION 'foobar';

Совместимость

PREPARE TRANSACTION является Digital Q.DataBase расширением. Команда предназначена для использования внешними системами управления транзакциями, некоторые из которых регулируются стандартами (например, X/Open XA), но интерфейс SQL для таких систем не стандартизирован.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению