-
Couldn't load subscription status.
- Fork 435
Closed
Description
- asyncpg version: 0.22.0 (also tested on 0.25.0)
- PostgreSQL version: 11
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?: N/A - Python version: 3.8
- Platform: linux
- Do you use pgbouncer?: No
- Did you install asyncpg with pip?: Yes
- If you built asyncpg locally, which version of Cython did you use?: N/A
- Can the issue be reproduced under both asyncio and
uvloop?: Not tested
When attempting an insert on a domain type I hit an issue where asyncpg was unable to handle the numeric[] type;
Traceback (most recent call last): File "test.py", line 40, in <module> asyncio.run(main()) File "/usr/local/lib/python3.8/asyncio/runners.py", line 43, in run return loop.run_until_complete(main) File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete return future.result() File "test.py", line 36, in main await insert_num_array(conn, [1, 2]) File "test.py", line 29, in insert_num_array await conn.execute(sql, (num_array,)) File "/home/quantumtm/src/asyncpg/asyncpg/connection.py", line 320, in execute _, status, _ = await self._execute( File "/home/quantumtm/src/asyncpg/asyncpg/connection.py", line 1659, in _execute result, _ = await self.__execute( File "/home/quantumtm/src/asyncpg/asyncpg/connection.py", line 1684, in __execute return await self._do_execute( File "/home/quantumtm/src/asyncpg/asyncpg/connection.py", line 1711, in _do_execute stmt = await self._get_statement( File "/home/quantumtm/src/asyncpg/asyncpg/connection.py", line 416, in _get_statement settings.register_data_types(types) File "asyncpg/protocol/settings.pyx", line 35, in asyncpg.protocol.protocol.ConnectionSettings.register_data_types cpdef inline register_data_types(self, types): File "asyncpg/protocol/settings.pyx", line 36, in asyncpg.protocol.protocol.ConnectionSettings.register_data_types self._data_codecs.add_types(types) File "asyncpg/protocol/codecs/base.pyx", line 556, in asyncpg.protocol.protocol.DataCodecConfig.add_types elem_codec = self.declare_fallback_codec( File "asyncpg/protocol/codecs/base.pyx", line 706, in asyncpg.protocol.protocol.DataCodecConfig.declare_fallback_codec raise exceptions.UnsupportedClientFeatureError( asyncpg.exceptions._base.UnsupportedClientFeatureError: unhandled standard data type 'numeric[]' (OID 1231) On analysis this error can occure for any, none str, array type.
A minimal replication case is given below
import asyncio import asyncpg from asyncpg.connection import Connection async def connect(): return await asyncpg.connect(user="quantumtm", password="quantumtm", database="test", host="127.0.0.1") async def setup(conn: Connection): sql = """ DROP TABLE IF EXISTS test; DROP DOMAIN IF EXISTS num_array; CREATE DOMAIN num_array numeric[]; CREATE TABLE test ( num num_array ); """ await conn.execute(sql) async def insert_num_array(conn: Connection, num_array): sql = "INSERT INTO test (num) VALUES ($1)" await conn.execute(sql, (num_array,)) async def main(): conn = await connect() await setup(conn) await insert_num_array(conn, [1, 2]) if __name__ == '__main__': asyncio.run(main())Metadata
Metadata
Assignees
Labels
No labels