MagicStack / MagicStack/asyncpg
BC dates result in error running the query
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 8.1k
- 分支
- 468
- PR 合併指標
- 30 天內沒有已合併 PR
描述
- asyncpg version: asyncpg=0.18.3=py37h1de35cc_0
- PostgreSQL version: PostgreSQL 11.1 on x86_64-apple-darwin18.2.0, compiled by Apple LLVM version 10.0.0 (clang-1000.11.45.5), 64-bit
- **Do you use a PostgreSQL SaaS? No
- Python version: 3.7
- Platform: osx
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
- If you built asyncpg locally, which version of Cython did you use?: No
- Can the issue be reproduced under both asyncio and
uvloop?: Tried only asyncio
When a date or datetime column includes dates in the form of 0001-01-01 BC which are valid postgres dates, the driver returns the following:
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 133, in asyncpg.pgproto.pgproto.date_decode
ValueError: ordinal must be >= 1
ValueError: ordinal must be >= 1
I assume this is some kind of a problem mapping from the BC date to a python date, however this is annoying since valid postgres tables can't be queries. At least in the interim it should be possible to return None if for some reason the date couldn't be parsed but not give up entirely. Is there a quick and dirty way around that?
貢獻指南
這個儲存庫沒有索引到貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 asyncpg/pgproto/./codecs/datetime.pyx 中 traceback 所示的 date_decode 路徑開始,使用包含 0001-01-01 BC 的 PostgreSQL date 或 datetime 重現此失敗。檢查現有的 date codec 測試,並確定 BC 值所支援的結果;完成條件是,解碼這類資料列不再中止查詢,且該行為由回歸測試涵蓋。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- postgresql, python
- 領域
- databases
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100