bigluck opened a new issue, #2567:
URL: https://github.com/apache/arrow-adbc/issues/2567
### What happened?
With the latest version of the library (1.4.0) this query:
```sql
SELECT n.oid,n.*,d.description FROM pg_catalog.pg_namespace n LEFT OUTER
JOIN pg_catalog.pg_description d ON d.objoid=n.oid AND d.objsubid=0 AND
d.classoid='pg_namespace'::regclass ORDER BY nspname
```
fails with:
```
adbc_driver_manager.ProgrammingError: INVALID_ARGUMENT: [libpq] Failed to
execute query 'SELECT n.oid,n.*,d.description FROM pg_catalog.pg_namespace n
LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=n.oid AND d.objsubid=0
AND d.classoid='pg_namespace'::regclass ORDER BY nspname': ERROR: no binary
output function available for type aclitem
```
I can't control the input SQL query, but I could "disable", if it's
possible, the binary mode for all the queries against the `pg_catalog`
namespace, but it isn't supported.
### Stack Trace
```
[postgres ] 2025-03-03 15:06:30.901 GMT [56969] ERROR: no binary output
function available for type aclitem
[postgres ] 2025-03-03 15:06:30.901 GMT [56969] STATEMENT: SELECT
n.oid,n.*,d.description FROM pg_catalog.pg_namespace n LEFT OUTER JOIN
pg_catalog.pg_description d ON d.objoid=n.oid AND d.objsubid=0 AND
d.classoid='pg_namespace'::regclass ORDER BY nspname
[postgres ] 2025-03-03 15:06:30.907 GMT [56969] WARNING: there is no
transaction in progress
Traceback (most recent call last):
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/streams/memory.py",
line 105, in receive
return self.receive_nowait()
^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/streams/memory.py",
line 100, in receive_nowait
raise WouldBlock
anyio.WouldBlock
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/streams/memory.py",
line 118, in receive
return receiver.item
^^^^^^^^^^^^^
AttributeError: 'MemoryObjectItemReceiver' object has no attribute 'item'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 157, in call_next
message = await recv_stream.receive()
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/streams/memory.py",
line 120, in receive
raise EndOfStream
anyio.EndOfStream
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/bigluck/dev/src/main.py", line 104, in
catch_exceptions_middleware
out = await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 163, in call_next
raise app_exc
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 149, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 185, in __call__
with collapse_excgroups():
File
"/nix/store/icv5w5d2sl202gxpz98hl33hglkir5c0-python3-3.12.3/lib/python3.12/contextlib.py",
line 158, in __exit__
self.gen.throw(value)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/_utils.py",
line 82, in collapse_excgroups
raise exc
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 187, in __call__
response = await self.dispatch_func(request, call_next)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/slowapi/middleware.py",
line 136, in dispatch
response = await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 163, in call_next
raise app_exc
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/base.py",
line 149, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/gzip.py",
line 20, in __call__
await responder(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/gzip.py",
line 39, in __call__
await self.app(scope, receive, self.send_with_gzip)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/opentelemetry/instrumentation/asgi/__init__.py",
line 743, in __call__
await self.app(scope, otel_receive, otel_send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/cors.py",
line 85, in __call__
await self.app(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/middleware/exceptions.py",
line 62, in __call__
await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py",
line 53, in wrapped_app
raise exc
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py",
line 42, in wrapped_app
await app(scope, receive, sender)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/routing.py",
line 715, in __call__
await self.middleware_stack(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/routing.py",
line 735, in app
await route.handle(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/routing.py",
line 288, in handle
await self.app(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/routing.py",
line 76, in app
await wrap_app_handling_exceptions(app, request)(scope, receive, send)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py",
line 53, in wrapped_app
raise exc
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/_exception_handler.py",
line 42, in wrapped_app
await app(scope, receive, sender)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/routing.py",
line 73, in app
response = await f(request)
^^^^^^^^^^^^^^^^
File "/Users/bigluck/dev/src/router.py", line 86, in custom_route_handler
out: Response = await original_route_handler(request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/fastapi/routing.py",
line 301, in app
raw_response = await run_endpoint_function(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/fastapi/routing.py",
line 214, in run_endpoint_function
return await run_in_threadpool(dependant.call, **values)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/starlette/concurrency.py",
line 39, in run_in_threadpool
return await anyio.to_thread.run_sync(func, *args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/to_thread.py",
line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py",
line 2177, in run_sync_in_worker_thread
return await future
^^^^^^^^^^^^
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py",
line 859, in run
result = context.run(func, *args)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/bigluck/dev/src/routes/route_create_query.py", line 304, in
route_create_query
raise e
File "/Users/bigluck/dev/src/routes/route_create_query.py", line 296, in
route_create_query
cur.execute(res_query)
File
"/Users/bigluck/dev/.venv/lib/python3.12/site-packages/adbc_driver_manager/dbapi.py",
line 698, in execute
handle, self._rowcount = _blocking_call(
^^^^^^^^^^^^^^^
File "adbc_driver_manager/_lib.pyx", line 1546, in
adbc_driver_manager._lib._blocking_call_impl
File "adbc_driver_manager/_lib.pyx", line 1217, in
adbc_driver_manager._lib.AdbcStatement.execute_query
File "adbc_driver_manager/_lib.pyx", line 260, in
adbc_driver_manager._lib.check_error
adbc_driver_manager.ProgrammingError: INVALID_ARGUMENT: [libpq] Failed to
execute query 'SELECT n.oid,n.*,d.description FROM pg_catalog.pg_namespace n
LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=n.oid AND d.objsubid=0
AND d.classoid='pg_namespace'::regclass ORDER BY nspname': ERROR: no binary
output function available for type aclitem
. SQLSTATE: 42883
INFO: 127.0.0.1:59923 - "POST /v0/bi/query HTTP/1.1" 500 Internal Server
Error
```
### How can we reproduce the bug?
```python
with (
adbc_driver_postgresql.dbapi.connect(CONNECTION_URI) as conn,
conn.cursor() as cur,
):
# https://github.com/apache/arrow-adbc/issues/2093
cur.adbc_statement.set_options(**{'adbc.postgresql.use_copy': 'false'})
cur.execute("SELECT n.oid,n.*,d.description FROM pg_catalog.pg_namespace
n LEFT OUTER JOIN pg_catalog.pg_description d ON d.objoid=n.oid AND
d.objsubid=0 AND d.classoid='pg_namespace'::regclass ORDER BY nspname")
```
### Environment/Setup
Postgresql 15.5
Python 3.12.3
adbc-driver-postgresql 1.4.0
pyarrow 19.0.1
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]