#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 django-updates+unsubscr...@googlegroups.com. 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.