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

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

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

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

Ошибка PostgreSQL 42P02: undefined_parameter — биндинг переменных

Обновлено: 26.08.2026 · Официальная документация ↗
  • Ошибка выполнения запроса ERROR: there is no parameter $ (SQLSTATE 42P02).
  • Сбои при выполнении подготовленных выражений (Prepared Statements), когда переданных позиционных параметров меньше, чем указано в теле запроса.
  • Ошибки прямого выполнения SQL через внешние компоненты или REST-коннекторы к базе 1С.

1. Анализ текста запроса и биндинга параметров

Проверьте соответствие плейсхолдеров ($1, $2, ...) и фактически переданных значений в логе PostgreSQL:

-- Ошибочный запрос (указан $2, но передан только один параметр):
PREPARE get_doc(int) AS SELECT * FROM _document123 WHERE _id = $1 AND _posted = $2;

-- Исправленный запрос:
PREPARE get_doc(int, bool) AS SELECT * FROM _document123 WHERE _id = $1 AND _posted = $2;
EXECUTE get_doc(100500, true);

2. Проверка генерации запросов в коде интеграции

Если используется связка с Python/NodeJS/C#, убедитесь, что библиотека формирует строгую последовательность без пропусков индексов (нельзя использовать $1 и $3 без $2):

-- Неверно:
SELECT * FROM users WHERE id = $1 AND role = $3;

-- Корректно:
SELECT * FROM users WHERE id = $1 AND role = $2;

3. Очистка кэша подготовленных выражений

DEALLOCATE ALL;
💡 Практика специалистов: При использовании пулеров соединений (PgBouncer) в режиме Transaction Pooling вызовы PREPARE / EXECUTE приводят к ошибкам 42P02 и 26000. Используйте безымянные подготовленные выражения или протокол Extended Query.

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

Почему возникает ошибка 42P02 при динамическом формировании SQL в 1С?

Ошибка возникает, если при генерации текста запроса для внешнего источника данных был сформирован строковый литерал со знаком $ (например, в значении поля), который парсер PostgreSQL ошибочно интерпретировал как позиционный параметр.

Как экранировать символ доллара в запросах PostgreSQL?

Используйте стандартные экранированные строки E'...' или доллар-квотинг с уникальным тегом: $tag$текст с $1 внутри$tag$.

Каково максимальное количество параметров в одном запросе PostgreSQL?

В протоколе PostgreSQL количество параметров в Bind-сообщении ограничено типом int16 и составляет максимум 65535 параметров.

Что делать при ошибке prepared statement "..." does not exist?

Это ошибка 26000. В отличие от 42P02, она указывает на то, что само подготовленное выражение не найдено или сессия пулера соединений сменилась.

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