Symptoms
A date/time string did not match the expected format.
- The error is written to the server log and returned to the client carrying
SQLSTATE 22007. - Any driver (libpq, JDBC, psycopg, npgsql, pgx) surfaces this code in its error object so you can branch on it programmatically.
- PL/pgSQL can trap it by name:
EXCEPTION WHEN invalid_datetime_format THEN.
Environment
Severity: ERROR | PostgreSQL versions: 12, 13, 14, 15, 16, 17
Reproduce with the exact statement and read the full message in the server log (raise log_min_messages / set log_min_error_statement for more context).
Root Cause
PostgreSQL could not parse the text as a valid date, time, or timestamp.
Common causes:
- Ambiguous or non-ISO date strings.
- A wrong
DateStylesetting. - Locale-specific formats.
- Empty strings cast to a date type.
Diagnostic Queries
Recovery
Steps to resolve 22007:
- Parse explicitly:
to_date(txt, 'YYYY-MM-DD')orto_timestamp(...)with the exact format. - Store and pass dates in ISO 8601 (
YYYY-MM-DD) form. - Normalize input and map empty strings to NULL before casting.
Reference: PostgreSQL error codes — Class 22 (Data Exception).
Thanks — noted. This helps keep the database accurate.