#35240: Django doesn't set Postgres timezone to UTC when using psycopg3
-------------------------------+--------------------------------------
Reporter: Fabi | Owner: nobody
Type: Bug | Status: new
Component: Uncategorized | Version: 5.0
Severity: Normal | Resolution:
Keywords: | Triage Stage: Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------+--------------------------------------
Description changed by Fabi:
Old description:
> Configuration uses `USE_TZ=True` and database defaults to
> `America/New_York`. I would expect the connection then being set to UTC,
> but it is not changed:
> ```
> In [4]: connections["default"].cursor().connection.info.timezone
> Out[4]: zoneinfo.ZoneInfo(key='America/New_York')
> ```
>
> The wrapper and the psycopg3 timezone adapter both think its UTC though:
> ```
> In [5]: connections["default"].timezone
> Out[5]: datetime.timezone.utc
>
> In [6]:
> connections["default"].cursor().connection.adapters.get_loader(TIMESTAMPTZ_OID,
> Format.TEXT).timezone
> Out[6]: datetime.timezone.utc
> ```
>
> Looking at the code I think the problem is that the adapter gets
> initialized with `self.timezone` which then gets compared with
> `self.timezone` later again, resulting in a no-op:
> -
> https://github.com/django/django/blob/31314980be428c0ab8a6cf40cce0a0c17ead8ec6/django/db/backends/postgresql/base.py#L243-L246
> -
> https://github.com/django/django/blob/31314980be428c0ab8a6cf40cce0a0c17ead8ec6/django/db/backends/postgresql/base.py#L349-L354
New description:
Configuration uses `USE_TZ=True` and database defaults to
`America/New_York`. I would expect the connection then being set to UTC,
but it is not changed:
{{{
In [4]: connections["default"].cursor().connection.info.timezone
Out[4]: zoneinfo.ZoneInfo(key='America/New_York')
}}}
The wrapper and the psycopg3 timezone adapter both think its UTC though:
{{{
In [5]: connections["default"].timezone
Out[5]: datetime.timezone.utc
In [6]:
connections["default"].cursor().connection.adapters.get_loader(TIMESTAMPTZ_OID,
Format.TEXT).timezone
Out[6]: datetime.timezone.utc
}}}
Looking at the code I think the problem is that the adapter gets
initialized with `self.timezone` which then gets compared with
`self.timezone` later again, resulting in a no-op:
-
https://github.com/django/django/blob/31314980be428c0ab8a6cf40cce0a0c17ead8ec6/django/db/backends/postgresql/base.py#L243-L246
-
https://github.com/django/django/blob/31314980be428c0ab8a6cf40cce0a0c17ead8ec6/django/db/backends/postgresql/base.py#L349-L354
--
--
Ticket URL: <https://code.djangoproject.com/ticket/35240#comment:1>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/0107018dc764ce58-32286bd2-bf2c-4e15-9068-a9a0d6771a2d-000000%40eu-central-1.amazonses.com.