MagicStack / MagicStack/asyncpg

text encoding of composite types error with schema and table name.

Offen
#779 1 Kommentar 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: 0.23.0
  • PostgreSQL version: 10.13
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
    the issue with a local PostgreSQL install?
    : No. I ran PG on local machine.
  • Python version: 3.8.2
  • Platform: MacOs catalina 10.15.7
  • 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?
    : Not tried

Hello!

I have table with ltree column:

create table product
(
    product_id    varchar(18)                                    not null
        constraint product_pkey
            primary key,
    category_path ltree
);

And trying execute this SQL query:

    insert into product
    (product_id, category_path)
    (select  r.product_id, r.category_path from unnest($1::product[]) as r)

Args:

[[{'category_path': 'A.B', 'product_id': '3912331'}]]

And i get this error:

File "/venv/lib/python3.8/site-packages/asyncpg/pool.py", line 530, in execute
    return await con.execute(query, *args, timeout=timeout)
  File "/venv/lib/python3.8/site-packages/asyncpg/connection.py", line 299, in execute
    _, status, _ = await self._execute(
  File "/venv/lib/python3.8/site-packages/asyncpg/connection.py", line 1623, in _execute
    result, _ = await self.__execute(
  File "/venv/lib/python3.8/site-packages/asyncpg/connection.py", line 1648, in __execute
    return await self._do_execute(
  File "/venv/lib/python3.8/site-packages/asyncpg/connection.py", line 1675, in _do_execute
    stmt = await self._get_statement(
  File "/venv/lib/python3.8/site-packages/asyncpg/connection.py", line 392, in _get_statement
    settings.register_data_types(types)
  File "asyncpg/protocol/settings.pyx", line 35, in asyncpg.protocol.protocol.ConnectionSettings.register_data_types
  File "asyncpg/protocol/settings.pyx", line 36, in asyncpg.protocol.protocol.ConnectionSettings.register_data_types
  File "asyncpg/protocol/codecs/base.pyx", line 506, in asyncpg.protocol.protocol.DataCodecConfig.add_types
  File "asyncpg/protocol/codecs/base.pyx", line 371, in asyncpg.protocol.protocol.Codec.new_composite_codec
  File "asyncpg/protocol/codecs/base.pyx", line 76, in asyncpg.protocol.protocol.Codec.init
asyncpg.exceptions._base.UnsupportedClientFeatureError: cannot decode type "public"."product": text encoding of composite types is not supported

But "public"."product" -- it's schema and table name.

If i create new table with category_path = text instead ltree, all ok.

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

Beginne damit, die Abfrage mit der ltree-Spalte und dem zusammengesetzten Produkttyp zu reproduzieren. Untersuche anschließend asyncpg/protocol/settings.pyx und asyncpg/protocol/codecs/base.pyx, die im Traceback erscheinen. Verfolge die Registrierung des zusammengesetzten Typs und überprüfe, dass das Verhalten für diesen Fall korrigiert ist, ohne die bestehende Behandlung zusammengesetzter Typen zu beeinträchtigen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
postgresql, python
Bereich
databases
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
38/100

Neue Issues direkt in Ihr Postfach

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