Ошибка PostgreSQL 22P02 invalid_text_representation: неверный формат типов
СУБД возвращает ошибку, когда строковый литерал не может быть приведен к целевому типу данных (число, 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); Частые вопросы (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}$'.