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

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

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

Ошибка PostgreSQL 22007 invalid_datetime_format: неверный формат даты

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

СУБД возвращает ошибку при попытке преобразования некорректной строковой константы в тип 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])$';
Практический опыт инженера: Никогда не передавайте даты в PostgreSQL в локализованных текстовых форматах ('25 Октября 2023'). Всегда используйте стандартный строгий формат ISO-8601 ('YYYY-MM-DD"T"HH24:MI:SS') для предотвращения зависимости от системной локали сервера.

Частые вопросы (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 или локальном времени сервера, управляя часовыми поясами программно.