corleyma opened a new issue, #3854:
URL: https://github.com/apache/arrow-adbc/issues/3854

   ### What happened?
   
   When using the PostgreSQL ADBC driver via Python DBAPI, `adbc_get_objects` 
can fail to return tables in a non-default schema even when `db_schema_filter` 
is provided.
   
   This appears to be caused by the driver’s table enumeration query using 
`pg_catalog.pg_table_is_visible(c.oid)`, which is `search_path`-dependent. As a 
result, tables in a schema that is not currently on `search_path` may be 
omitted even if `db_schema_filter` specifies that schema.
   
   ### How can we reproduce the bug?
   
   1. Create a schema and table in a non-default schema, leaving the current 
schema as `public`:
   
   ```python
   from adbc_driver_postgresql import dbapi
   
   uri = "postgresql://postgres:password@localhost:5432/postgres"  # example
   
   with dbapi.connect(uri) as conn:
       # default current schema is "public"
       with conn.cursor() as cur:
           cur.execute('CREATE SCHEMA IF NOT EXISTS "marimo_test"')
           cur.execute('DROP TABLE IF EXISTS "marimo_test"."t"')
           cur.execute('CREATE TABLE "marimo_test"."t" (ints INT)')
       conn.commit()
   
       reader = conn.adbc_get_objects(
           depth="tables",
           db_schema_filter="marimo_test",
           table_name_filter="t",
       )
       print(reader.read_all().to_pylist())
   ```
   
   ### Expected behavior
   
   The results should include schema `marimo_test` and table `t`.
   
   ### Actual behavior
   
   The table is omitted unless the schema is on `search_path` / the 
connection’s current schema is set accordingly.
   
   ### Notes / suspected cause
   
   The driver’s GetObjects tables query uses 
`pg_catalog.pg_table_is_visible(c.oid)` which filters based on `search_path`. 
This makes schema filtering behave unexpectedly when the requested schema is 
not on `search_path`.
   
   ### Workaround
   
   Set the connection’s current schema (or adjust `search_path`) to include the 
schema before calling `adbc_get_objects`.
   
   ### Proposed fix
   
   Remove `pg_catalog.pg_table_is_visible(c.oid)` from the table enumeration 
query and rely on the explicit schema predicate (`n.nspname = $1`) so 
`db_schema_filter` works as intended regardless of `search_path`.
   


-- 
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]

Reply via email to