Comments (10)
I'll see if I can put a PostgreSQL patch together to support binary I/O for ltree.
from asyncpg.
Custom data codecs can be specified using Connection.set_type_codec().
As to the error itself, it seems to be a bug, as unknown data types should be returned as text. I'll look into this.
from asyncpg.
H-m-m. I can't seem to reproduce this. Would you mind sharing a snippet that triggers this?
from asyncpg.
Mmm, it seems something specific to our DB. If I a create a new DB with ltree installed, asyncpg returns text, like you said.
I'll keep trying.
from asyncpg.
It fails with a composite ltree (ltree[]
). Complete steps:
Python 3.5.2, Ubuntu 16.04 and PostgreSQL 9.5.3 (with contrib package installed).
createdb example_asyncpg
- Inside the db:
CREATE EXTENSION ltree;
- SQL:
DROP TABLE IF EXISTS test;
CREATE TABLE test (path ltree, comp_path ltree[]);
INSERT INTO test VALUES ('Top', '{"1", "2"}');
- Python file:
import asyncio
import asyncpg
async def run():
conn = await asyncpg.connect(user='example', password='example',
database='example_asyncpg', host='127.0.0.1')
values = await conn.fetch('''SELECT comp_path FROM test''')
await conn.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(run())
- Exception:
File "asyncpg/protocol/protocol.pyx", line 165, in bind_execute (asyncpg/protocol/protocol.c:45839)
File "/usr/lib/python3.5/asyncio/futures.py", line 361, in __iter__
yield self # This tells Task to wait for completion.
File "/usr/lib/python3.5/asyncio/tasks.py", line 296, in _wakeup
future.result()
File "/usr/lib/python3.5/asyncio/futures.py", line 274, in result
raise self._exception
asyncpg.exceptions.UndefinedFunctionError: no binary output function available for type ltree
from asyncpg.
OK, so the real issue here is that ltree does not implement binary I/O. Unfortunately, current version of asyncpg does not support text-only datatypes in arrays or composite types, as that would require complicated text parsing for everything. This is a limitation of PostgreSQL protocol.
As workaround, you can cast ltree[] to text[]:
await conn.fetch('''SELECT comp_path::text[] FROM test''')
from asyncpg.
That's perfect, thanks.
from asyncpg.
@fmariluis, try asyncpg-0.8.4: @elprans added text array decoder, your steps to reproduce give correct result for me.
from asyncpg.
I'll give it a try. Thanks.
from asyncpg.
This is fixed in the released version.
from asyncpg.
Related Issues (20)
- Query does not processed HOT 3
- connect through socks5 proxy HOT 2
- Error: there is no unique or exclusion constraint matching the ON CONFLICT specification HOT 2
- Introspection TYPE_BY_OID running for long time HOT 3
- invalid input for query argument (can't subtract offset-naive and offset-aware datetimes)
- Feature request: Support for asynchronous command processing
- Asyncpg (asyncio/asyncpg.py, line 62, in get_query) get_query throws index error.
- no binary format encoder for type jsonb
- Whenever i create a table with a `real` column and read the value i get something different then what i saved
- insufficient data in buffer
- GCP CloudSQL Connector with asyncpg Pool
- cursor prefetch with bounded lag
- asyncpg.connect: ValueError: invalid literal for int() with base 10 HOT 5
- Connection secrets displayed in clear text in logs
- RDS Proxy Pinning
- Any ETA on releasing the latest version with GSS? HOT 1
- Timeout configuration for multi-host config
- Terminate function does not work when a stream is cancelled prematurely when in an anyio task group HOT 1
- Extremely long delay grabbing type info for string array (and likely other types) on CockroachDB HOT 1
- SELECT query to database returns wrong decimal values. HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from asyncpg.