MagicStack / MagicStack/asyncpg

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

オープン
#779 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Python
スター
8.1k
フォーク
468
PR マージ指標
30日以内にマージされた PR はありません

説明

* **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](https://github.com/magicstack/uvloop)?**: Not tried

Hello!

I have table with [ltree](https://postgrespro.com/docs/enterprise/10/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.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、ltree列と複合プロダクト型を使ってクエリを再現し、その後、トレースバックに現れる asyncpg/protocol/settings.pyx と asyncpg/protocol/codecs/base.pyx を調査します。複合型の登録を追跡し、既存の複合型の処理を壊すことなく、このケースで動作が修正されていることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
postgresql, python
領域
databases
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
38/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。