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

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

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

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

Ошибка PostgreSQL 38000: external_routine_exception — сбои расширений

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка ERROR: external routine exception (SQLSTATE 38000) при вызове скомпилированных C-функций или сторонних процедурных языков (PL/Python, PL/Perl, PL/Java).
  • Падение процесса бэкенда при вызове функций расширений полнотекстового поиска, криптографии или специфических модулей 1С.
  • В системных логах ОС фиксируется аварийное завершение с кодом SIGSEGV или SIGBUS в разделяемых библиотеках (.so).

1. Анализ системного журнала и ядра dmesg

dmesg -T | grep -Ei "segfault|postgres|general protection fault"
journalctl -u postgresql -n 100 --no-pager

2. Проверка версий скомпилированных расширений

Несоответствие версий заголовочных файлов ядра и скомпилированных динамических библиотек — главная причина 38000:

SELECT name, default_version, installed_version 
FROM pg_available_extensions 
WHERE installed_version IS NOT NULL;

3. Обновление расширений после миграции PostgreSQL

ALTER EXTENSION pg_trgm UPDATE;
ALTER EXTENSION "uuid-ossp" UPDATE;

4. Отладка внешней функции на языке C

Если используется кастомный модуль .so, перекомпилируйте его с флагами отладки и проверьте валидность работы с памятью через palloc вместо стандартного системного malloc:

gcc -O2 -g -Wall -fPIC -I$(pg_config --includedir-server) -c custom_mod.c
gcc -shared -o custom_mod.so custom_mod.o

5. Проверка прав доступа к внешним файлам библиотек

ls -la $(pg_config --pkglibdir)
💡 Практика специалистов: Никогда не копируйте скомпилированные .so файлы между разными мажорными версиями PostgreSQL или дистрибутивами Linux (например, с Ubuntu 20.04 на Rocky 9) — это гарантирует ошибку 38000 или повреждение памяти ядра.

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

Почему 1С падает с 38000 при использовании расширения pg_trgm_1c?

Сбой происходит из-за несовместимости ABI при обновлении минорной версии ядра PostgreSQL без предварительной пересборки специализированного модуля поиска 1С.

Может ли ошибка 38000 привести к падению всего сервера PostgreSQL?

Да, если внешняя C-функция выполнит некорректное разыменование нулевого указателя (NULL pointer dereference), процесс упадет с SIGSEGV, вызвав аварийный перезапуск всего кластера СУБД.

Как изолировать выполнение небезопасных внешних языков?

Используйте доверенные (TRUSTED) языки процедур или запускайте тяжелые сервисы обработки данных вне контекста СУБД через очереди сообщений (RabbitMQ/Kafka).

Что делать, если библиотека .so требует сторонних зависимостей?

Проверьте линковку утилитой ldd: ldd /usr/lib/postgresql/16/lib/my_ext.so и установите недостающие системные пакеты.

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