asyncpg icon indicating copy to clipboard operation
asyncpg copied to clipboard

Database timezone ignored for timestamptz

Open TheJJ opened this issue 2 years ago • 4 comments

  • asyncpg version: 0.27.0
  • PostgreSQL version: 15.1
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce the issue with a local PostgreSQL install?: local
  • Python version: 3.10.9
  • Platform: Linux
  • Do you use pgbouncer?: no
  • Did you install asyncpg with pip?: no
  • If you built asyncpg locally, which version of Cython did you use?: 0.29.33
  • Can the issue be reproduced under both asyncio and uvloop?: not tested, since unlikely

I would expect the datetime.datetime object has the same timezone as psql or python determines (CET).

Instead, asyncpg sets the timezone to UTC.

psql shell, displays UTC+1 = CET properly:

=> select now()::timestamptz;
 2023-02-19 01:53:28.453411+01

python-shell:

>>> loop = asyncio.new_event_loop()
>>> c = loop.run_until_complete(asyncpg.connect(database='lol'))
>>> loop.run_until_complete(c.fetch("select now()::timestamptz"))
[<Record now=datetime.datetime(2023, 2, 19, 0, 54, 39, 597496, tzinfo=datetime.timezone.utc)>]
# ^ here, i'd expect it to be with tzinfo=datetime.timezone(datetime.timedelta(seconds=3600), 'CET')

# because python does the same thing when having timezoned timestamps:
>>> datetime.datetime.now().astimezone()
datetime.datetime(2023, 2, 19, 1, 57, 12, 260030, tzinfo=datetime.timezone(datetime.timedelta(seconds=3600), 'CET'))

TheJJ avatar Feb 19 '23 01:02 TheJJ

Dupe of #481 ?

adriangb avatar Feb 19 '23 08:02 adriangb

I've submitted a fix at MagicStack/py-pgproto#21

TheJJ avatar Feb 22 '23 15:02 TheJJ

can this please be reviewed?

TheJJ avatar Apr 08 '23 17:04 TheJJ