OverflowError: date value out of range
- asyncpg version: 0.18.3
- PostgreSQL version: 10.7
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce the issue with a local PostgreSQL install?: Yes
- Python version: 3.7
- Platform: Mac OS
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
- If you built asyncpg locally, which version of Cython did you use?:
- Can the issue be reproduced under both asyncio and uvloop?:
asyncpg is failing to parse timestamp
code:
import asyncio
import asyncpg
async def run():
conn = await asyncpg.connect(user='secure', password='secure',
database='secure',
host='secure.com', port=15432, timeout=600)
values = await conn.fetch('''SELECT _ts FROM Events''')
print(values)
await conn.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
Timestamp format: 2019-01-01T08:42:25.921Z
Traceback (most recent call last):
File "/scratch_65.py", line 21, in <module>
loop.run_until_complete(run())
File "/usr/local/Cellar/python/3.7.2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
return future.result()
File "/scratch_65.py", line 15, in run
values = await conn.fetch('''SELECT _ts FROM Events''')
File "/lib/python3.7/site-packages/asyncpg/connection.py", line 421, in fetch
return await self._execute(query, args, 0, timeout)
File "/lib/python3.7/site-packages/asyncpg/connection.py", line 1414, in _execute
query, args, limit, timeout, return_status=return_status)
File "/lib/python3.7/site-packages/asyncpg/connection.py", line 1422, in __execute
return await self._do_execute(query, executor, timeout)
File "/lib/python3.7/site-packages/asyncpg/connection.py", line 1444, in _do_execute
result = await executor(stmt, None)
File "asyncpg/protocol/protocol.pyx", line 196, in bind_execute
File "asyncpg/protocol/coreproto.pyx", line 65, in asyncpg.protocol.protocol.CoreProtocol._read_server_messages
File "asyncpg/protocol/coreproto.pyx", line 202, in asyncpg.protocol.protocol.CoreProtocol._process__bind_execute
File "asyncpg/protocol/coreproto.pyx", line 498, in asyncpg.protocol.protocol.CoreProtocol._parse_data_msgs
File "asyncpg/protocol/protocol.pyx", line 754, in asyncpg.protocol.protocol.BaseProtocol._decode_row
File "asyncpg/protocol/prepared_stmt.pyx", line 282, in asyncpg.protocol.protocol.PreparedStatementState._decode_row
File "asyncpg/protocol/codecs/base.pyx", line 288, in asyncpg.protocol.protocol.Codec.decode
File "asyncpg/protocol/codecs/base.pyx", line 195, in asyncpg.protocol.protocol.Codec.decode_scalar
File "asyncpg/pgproto/./codecs/datetime.pyx", line 252, in asyncpg.pgproto.pgproto.timestamptz_decode
OverflowError: date value out of range
As suggested in #404, I have used the custom codec for the date type. But still, it fails with a different error.
await conn.set_type_codec(
typename='date', encoder=str, decoder=str,
schema='public', format='text'
)
Traceback (most recent call last):
File "/scratch_65.py", line 20, in <module>
loop.run_until_complete(run())
File "/usr/local/Cellar/python/3.7.2/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
return future.result()
File "/scratches/scratch_65.py", line 11, in run
schema='public', format='text'
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 964, in set_type_codec
introspection.TYPE_BY_NAME, typename, schema)
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 455, in fetchrow
data = await self._execute(query, args, 1, timeout)
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 1414, in _execute
query, args, limit, timeout, return_status=return_status)
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 1422, in __execute
return await self._do_execute(query, executor, timeout)
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 1437, in _do_execute
stmt = await self._get_statement(query, timeout)
File "/.virtualenvs/darwin-api/lib/python3.7/site-packages/asyncpg/connection.py", line 329, in _get_statement
statement = await self._protocol.prepare(stmt_name, query, timeout)
File "asyncpg/protocol/protocol.pyx", line 163, in prepare
asyncpg.exceptions._base.UnknownPostgresError: ERR_PARAMETER_NOT_INITIALIZED: Parameter ":1" was not initialized
@elprans Any thoughts on the above issue?
I don't recognize that error. Are you running vanilla Postgres?
Also, you probably meant this (your column is a timetstamp, not a date):
await conn.set_type_codec(
typename='timestamptz', encoder=str, decoder=str,
schema='pg_catalog', format='text'
)
I seem to be hitting this OverflowError: date value out of range even when within the connection pool's connection init callback I use a the very custom codec in the latest reply above (times two, once for timestamp and once for timestamptz. This is happening with a prepared statement's fetch. Next, if I didn't encounter this exception upon reading, the attained records would be fed into an other prepared statement's executemany.