Ошибка PostgreSQL 22007 invalid_datetime_format: неверный формат даты
СУБД возвращает ошибку при попытке преобразования некорректной строковой константы в тип timestamp, date или time:
ERROR: invalid input syntax for type timestamp: "2023-02-29 12:00:00"
-- либо:
ERROR: date/time field value out of range: "2023-13-01"
SQLSTATE: 22007В платформе 1С ошибка возникает при интеграции через REST/SOAP API, работе с внешними источниками данных или загрузке нестандартных форматов дат из внешних файлов.
1. Проверка системной настройки DateStyle
Несоответствие порядка дня и месяца (DD/MM/YYYY против MM/DD/YYYY) — главная причина сбоя 22007 при текстовом вводе:
-- Проверка текущей локали дат
SHOW DateStyle;
-- Установка стандарта ISO (рекомендуется для 1С и Enterprise-систем)
SET DateStyle = 'ISO, DMY';2. Использование безопасного явного парсинга через TO_DATE / TO_TIMESTAMP
-- Ошибочный запрос (неявное приведение):
SELECT '31-04-2023'::date;
-- Корректный парсинг с шаблоном:
SELECT TO_TIMESTAMP('25-12-2023 15:30:00', 'DD-MM-YYYY HH24:MI:SS');3. Проблема пустых дат и смещения 2000 в 1С:Предприятие
Платформа 1С хранит пустую дату как 0001-01-01 00:00:00. При создании базы в PostgreSQL с флагом смещения дат эта дата физически преобразуется в 2001-01-01 00:00:00. Нарушение этой логики прямыми SQL-запросами вызывает ошибку 22007.
-- Корректная выборка с учетом смещения дат 1С:
SELECT "_Date_Time" - INTERVAL '2000 years' AS actual_1c_date
FROM "_Document100";4. Валидация дат регулярным выражением перед конвертацией
SELECT raw_date_text
FROM import_staging
WHERE raw_date_text !~ '^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$'; Частые вопросы (FAQ)
Почему в PostgreSQL возникает ошибка 22007 на дату '0001-01-01 BC'?
В календаре не существует нулевого года (после 1 года до н.э. сразу наступает 1 год н.э.). Некорректное форматирование эр (BC/AD) или високосных годов (например, 29 февраля в невисокосный год) вызывает отказ парсера дат ядра.
Как глобально задать DateStyle для пользователя базы 1С?
Выполните команду: ALTER USER usr1cv8 SET DateStyle = 'ISO, DMY'; и перезапустите сессии кластера серверов 1С.
Как обработать некорректную дату без прерывания транзакции?
В PostgreSQL 16+ можно использовать безопасные функции приведения или написать PL/pgSQL функцию-обертку с блоком EXCEPTION WHEN datetime_field_overflow THEN RETURN NULL;.
В чем разница между TIMESTAMP WITH TIME ZONE и WITHOUT TIME ZONE в 1С?
Платформа 1С:Предприятие проектирует таблицы исключительно с типом timestamp without time zone, сохраняя время в UTC или локальном времени сервера, управляя часовыми поясами программно.