Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

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

3B000 1С:Предприятие и СУБД

Ошибка 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.

Полезные материалы
Рекомендуем