-
Notifications
You must be signed in to change notification settings - Fork 400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How do I implement a custom data type? #22
Comments
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. |
H-m-m. I can't seem to reproduce this. Would you mind sharing a snippet that triggers this? |
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. |
It fails with a composite ltree ( Python 3.5.2, Ubuntu 16.04 and PostgreSQL 9.5.3 (with contrib package installed).
|
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[]:
|
That's perfect, thanks. |
I'll see if I can put a PostgreSQL patch together to support binary I/O for ltree. |
@fmariluis, try asyncpg-0.8.4: @elprans added text array decoder, your steps to reproduce give correct result for me. |
I'll give it a try. Thanks. |
This is fixed in the released version. |
Hi, our db uses ltrees (https://www.postgresql.org/docs/current/static/ltree.html) and asyncpg fails with
asyncpg.exceptions.UndefinedFunctionError: no binary output function available for type ltree
In psycopg2 you could write an adapter to cast the SQL type to a python object (http://initd.org/psycopg/docs/advanced.html#type-casting-of-sql-types-into-python-objects).
Is there a way to do something like that for this driver?
Very interesting project, btw!
The text was updated successfully, but these errors were encountered: