22009 — invalid_time_zone_displacement_value
22009
At a glance
22009 is invalid_time_zone_displacement_value. The fixed timetz_recv binary-input path rejects a GMT displacement outside the supported range.
| Field | Value |
|---|---|
| SQLSTATE | 22009 |
| Condition | invalid_time_zone_displacement_value |
| Status | active |
| Known present by | 7.4 |
| Locked snapshots | 9.0.23, 9.1.24, 9.2.24, 9.3.25, 9.4.26, 9.5.25, 9.6.24, 10.23, 11.22, 12.22, 13.23, 14.24, 15.19, 16.15, 17.11, 18.6, 19beta3 |
| Macros | ERRCODE_INVALID_TIME_ZONE_DISPLACEMENT_VALUE |
| Aliases | — |
Meaning
22009 is invalid_time_zone_displacement_value. The confirmed timetz_recv guard checks the received GMT displacement against PostgreSQL’s supported limit; this is a binary input contract, not a generic session TimeZone setting error.
Messages
The confirmed guard raises ERROR with primary time zone displacement out of range. It has no fixed DETAIL or HINT in this source path. This page is source-only; no natural runtime observation is claimed.
Diagnosis
Inspect the supplied zone offset and the binary timetz receiver or protocol decoder that delivered it. Keep an invalid displacement distinct from a generic datetime field overflow or a session TimeZone setting.
Response
Validate and replace the offset in the client or binary input that supplied it; use a named zone only when the input contract supports that representation. This is an ERROR: in an explicit transaction, roll back the transaction or roll back to a savepoint established before the failing conversion before continuing. Validate at the client boundary before repeating the conversion. No runtime case was run for this page.
Versions
The locked catalogue records this condition from 7.4 in the listed formal snapshots and 19beta3; fixed source coverage is PostgreSQL 18.6.
Related
Sources
See the fixed source links and scope limits in the structured evidence record.