Opened 2 years ago

Closed 2 years ago

#34202 closed Cleanup/optimization (wontfix)

Strict time zone name condition in PostgreSQL DatabaseWrapper.

Reported by: Alexander Ebral Owned by: nobody
Component: Database layer (models, ORM) Version: 4.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

DatabaseWrapper from https://github.com/django/django/blob/main/django/db/backends/postgresql/base.py
in function ensure_timezone checks that

conn_timezone_name != timezone_name

in our PostgreSQL config timezone was set to 'Etc/UTC' and in django was 'UTC' (There is NO difference between UTC and Etc/UTC time zones: https://stackoverflow.com/questions/14128574/is-there-a-difference-between-the-utc-and-etc-utc-time-zones)
which led to many unnecessary

set time zone 'UTC'

queries.
Maybe we need to change this condition to some fuzzy form? Something like this?:

conn_timezone_name not in timezone_name and timezone_name not in conn_timezone_name

Change History (2)

in reply to:  description comment:1 by Mariusz Felisiak, 2 years ago

Maybe we need to change this condition to some fuzzy form? Something like this?:

conn_timezone_name not in timezone_name and timezone_name not in conn_timezone_name

This would be really clunky, e.g. all UTC+X timezone would be consider equal to UTC.

comment:2 by Mariusz Felisiak, 2 years ago

Resolution: wontfix
Status: newclosed
Type: BugCleanup/optimization

Maintaining list of time zone aliases in Django is not doable. Also, UTC and Etc/UTC are not considered equal by zoneinfo:

>>> import zoneinfo 
>>> z1 = zoneinfo.ZoneInfo("UTC")
>>> z2 = zoneinfo.ZoneInfo("Etc/UTC")
>>> z1 == z2
False

so I don't think there is much we can do in Django itself. I'd recommend to use UTC in PostgreSQL or Etc/UTC in settings.TIME_ZONE.

Note: See TracTickets for help on using tickets.
Back to Top