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

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

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

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

PostgreSQL Error 54000 program_limit_exceeded: Решение проблемы

Обновлено: 26.08.2026 · Официальная документация ↗
  • Запрос аварийно прерывается с ошибкой ERROR: 54000: program limit exceeded.
  • Сбои сложных иерархических отчетов в 1С при выполнении бесконечных или глубоких рекурсий.
  • Падение операций создания индексов или группировок при превышении лимитов структур данных.
  • Отказ выполнения динамически сгенерированных аналитических SQL-запросов.

1. Анализ текста ошибки и первопричины

Код 54000 является базовым для класса переполнения программных лимитов. Точная причина всегда детализируется в сопровождающем сообщении лога (например, превышение глубины стека, размера кортежа или лимита структур).

grep -E "54000|limit exceeded" /var/log/postgresql/postgresql-*.log

2. Устранение зацикливания в рекурсивных запросах (Recursive CTE)

Самая частая причина ошибки — зацикливание рекурсивного обхода деревьев/справочников. Добавьте ограничение глубины рекурсии или проверку циклов:

-- Безопасный рекурсивный запрос с ограничением глубины и защитой от зацикливания
WITH RECURSIVE hierarchy_tree AS (
    SELECT id, parent_id, 1 AS depth, ARRAY[id] AS path
    FROM catalog_items WHERE parent_id IS NULL
    
    UNION ALL
    
    SELECT c.id, c.parent_id, h.depth + 1, h.path || c.id
    FROM catalog_items c
    JOIN hierarchy_tree h ON c.parent_id = h.id
    WHERE NOT c.id = ANY(h.path) -- Защита от бесконечного цикла
      AND h.depth < 100          -- Защита от превышения лимита вызовов
)
SELECT * FROM hierarchy_tree;

3. Настройка глубины стека ядра (max_stack_depth)

Если сложные вложенные функции падают из-за безопасного лимита стека, скорректируйте max_stack_depth в postgresql.conf (значение должно быть минимум на 1MB меньше системного ulimit -s):

# Проверка системного лимита в Linux (обычно 8192KB)
ulimit -s
-- Увеличение лимита в postgresql.conf (например, до 6MB при ulimit 8MB)
ALTER SYSTEM SET max_stack_depth = '6MB';
SELECT pg_reload_conf();

4. Оптимизация тяжелых сортировок и группировок

При нехватке памяти для построения внутренних хеш-таблиц увеличьте work_mem для проблемной сессии:

SET work_mem = '256MB';
💡 Практика специалистов: При анализе баз 1С с ошибкой 54000 первым делом выполните поиск циклических ссылок в родительских группах справочников с помощью простого скрипта проверки графов.

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

Каковы жесткие фундаментальные ограничения PostgreSQL?

Максимальный размер базы данных — неограничен; максимальный размер таблицы — 32 TB; максимальный размер одной строки (tuple) — 1.6 TB (с TOAST); максимальное количество колонок в таблице — 250-1600 (в зависимости от типов); лимит аргументов функции — 100.

Чем грозит слишком высокое значение max_stack_depth?

Если установить max_stack_depth выше фактического размера стека операционной системы (ulimit -s), то при возникновении глубокой рекурсии процесс PostgreSQL аварийно завершится по Segmentation Fault (SIGSEGV), что приведет к перезапуску всего сервера.

Как эта ошибка проявляется в 1С:Предприятие?

В 1С она возникает при расчете себестоимости, закрытии месяца или формировании дерева спецификаций, если в номенклатуре или подразделениях возникла циклическая ссылка (узел ссылается сам на себя).

Можно ли обойти лимит 54000 простым добавлением RAM?

Нет. Лимиты класса 54000 являются программными константами ядра PostgreSQL или защитными предохранителями от бесконечных циклов. Проблема решается оптимизацией алгоритма запроса.

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