Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка PostgreSQL 3B000: savepoint_exception — точки сохранения

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Ошибка транзакции ERROR: savepoint exception (SQLSTATE 3B000) при попытке работы с точками сохранения.
  • Откат к несуществующей, ранее освобожденной (released) или испорченной точке сохранения.
  • Сбои в сложных транзакционных цепочках 1С:Предприятие при возникновении исключений в попытке-исключении платформы.

1. Проверка логики создания и освобождения Savepoints

Точка сохранения становится недействительной после ее явного освобождения через RELEASE SAVEPOINT или после завершения всей транзакции:

BEGIN;
SAVEPOINT sp_step1;
-- Выполнение операций DML...

-- Неверно:
RELEASE SAVEPOINT sp_step1;
ROLLBACK TO SAVEPOINT sp_step1; -- Вызовет ошибку 3B001 / 3B000

-- Корректно:
SAVEPOINT sp_step1;
-- Выполнение операций...
-- При ошибке:
ROLLBACK TO SAVEPOINT sp_step1;
COMMIT;

2. Обработка ошибок в транзакциях 1С

В коде 1С конструкция Попытка ... Исключение генерирует внутренние субтранзакции. Если внутри транзакции происходит аварийная ошибка уровня СУБД, вся транзакция переходит в статус InFailedSqlTransaction:

-- Проверка статуса транзакции
SELECT txid_current_if_assigned(), txid_status(txid_current_if_assigned());

3. Очистка состояния сессии после сбоя точки сохранения

-- Если транзакция помечена как сбойная, выполните полный откат:
ROLLBACK;
Практический опыт инженера: Избегайте создания глубоких иерархий savepoints в высоконагруженных базах 1С (более 64 subxids на транзакцию). Это приводит к переполнению буфера Shared Invalid Message Cache и блокировкам ProcArrayLock.

Частые вопросы (FAQ)

Чем отличается RELEASE SAVEPOINT от ROLLBACK TO SAVEPOINT?

ROLLBACK TO SAVEPOINT откатывает все изменения данных, совершенные после установки точки сохранения, сохраняя саму точку активной. RELEASE SAVEPOINT уничтожает саму точку сохранения, фиксируя изменения в рамках текущей транзакции.

Создают ли вложенные блоки BEGIN в 1С реальные вложенные транзакции в PostgreSQL?

Нет. В PostgreSQL все вложенные транзакции 1С (НачатьТранзакцию() внутри другой транзакции) реализуются исключительно через точки сохранения (SAVEPOINT).

Сколько точек сохранения можно создать в рамках одной транзакции?

Количество ограничено объемом оперативной памяти, однако создание десятков тысяч savepoints (subxids) приводит к деградации производительности механизма Transaction Status (pg_subtrans).

Почему после ошибки SAVEPOINT нельзя выполнять SELECT запросы?

При возникновении необработанной ошибки ядро блокирует выполнение любых команд, кроме ROLLBACK или ROLLBACK TO SAVEPOINT.