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

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

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

Ошибка PostgreSQL 22P02 invalid_text_representation: неверный формат типов

Обновлено: 26.08.2026  ·  Официальная база знаний

СУБД возвращает ошибку, когда строковый литерал не может быть приведен к целевому типу данных (число, UUID, boolean, json):

ERROR: invalid input syntax for type integer: "abc"
-- либо:
ERROR: invalid input syntax for type uuid: "00000000-0000-0000-0000"
SQLSTATE: 22P02

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

1. Поиск запроса и невалидного значения в логах

Включите расширенное логирование в postgresql.conf для идентификации входящего литерала:

log_min_error_statement = error
log_line_prefix = '%m [%p] %u@%d '

2. Корректная работа с GUID / UUID 1С:Предприятие

В PostgreSQL для 1С GUID хранится в бинарном типе bytea или специальном представлении. При прямых запросах приведение строки к UUID требует строгого соответствия формату 32 hex-символов с 4 дефисами:

-- Неверный синтаксис:
SELECT * FROM "_Reference10" WHERE "_IDRRef" = 'не-уид';

-- Корректный поиск по 1С UUID (bytea):
SELECT * FROM "_Reference10" WHERE "_IDRRef" = '\x80c100155d010b0111ebb5d011223344'::bytea;

3. Безопасная конвертация строк в числа

Используйте проверку через регулярные выражения или конструкцию CASE:

SELECT 
  CASE 
    WHEN raw_val ~ '^-?[0-9]+$' THEN raw_val::integer 
    ELSE NULL 
  END AS safe_int
FROM staging_table;

4. Исправление типизации в запросах 1С

Убедитесь, что в параметры запроса 1С передается значение правильного типа, а не пустая строка:

// Ошибочно:
Запрос.УстановитьПараметр("Сумма", "");

// Корректно:
Запрос.УстановитьПараметр("Сумма", 0);
Практический опыт инженера: При интеграции внешних сервисов с базами PostgreSQL через REST API всегда осуществляйте жесткую валидацию и санитацию типов входного JSON на стороне бэкенда до формирования SQL-запроса.

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

Почему попытка привести пустую строку '' к integer вызывает ошибку 22P02?

В PostgreSQL пустая строка '' не эквивалентна значению NULL или нулю (0). Попытка выполнить ''::integer всегда генерирует ошибку invalid input syntax.

Как превратить пустую строку в NULL при приведении типов?

Используйте функцию NULLIF: NULLIF(str_val, '')::integer. Если строка пустая, NULLIF вернет NULL, который успешно приведется к любому типу.

Почему 22P02 возникает при парсинге JSON (json / jsonb)?

Ошибка возникает, если строка не соответствует спецификации RFC 8259 (например, отсутствуют закрывающие кавычки, используются одинарные кавычки вместо двойных или присутствуют управляющие спецсимволы без экранирования).

Как проверить, является ли строка валидным UUID перед приведением?

Используйте регулярное выражение: str_col ~* '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'.