MagicStack / MagicStack/asyncpg

BC dates result in error running the query

Offen
#404 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
8.1k
Forks
468
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

  • 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?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie in asyncpg/pgproto/./codecs/datetime.pyx am im Traceback gezeigten date_decode-Pfad und reproduzieren Sie den Fehler mit einem PostgreSQL date oder datetime, das 0001-01-01 BC enthält. Prüfen Sie die vorhandenen date-Codec-Tests und bestimmen Sie das unterstützte Ergebnis für BC-Werte; abgeschlossen ist die Aufgabe, wenn das Decodieren einer solchen Zeile die Abfrage nicht mehr abbricht und das Verhalten durch einen Regressionstest abgedeckt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
postgresql, python
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.