CrateDB into Apache Arrow through ADBC: the native PostgreSQL ADBC driver vs the ODBC route, measured

CrateDB speaks the PostgreSQL wire protocol, so there are two ways to get its results into Arrow record batches through ADBC (Arrow Database Connectivity): the Apache Arrow project’s native PostgreSQL ADBC driver, or adbcBridge, an ADBC driver that wraps an ODBC driver, here psqlodbc. On 2026-09-05 I ran one seven-step workload through both against CrateDB 6.4: connect, SELECT 1, an eight-column CREATE TABLE plus two INSERTs and a read, a 1,000-row bulk ingest, table schema, catalog listing, and a read of the ingested table.

Native PostgreSQL ADBC driver 1.12.0: connects, then stops at SELECT 1 with “could not begin COPY: ERROR: line 1:6: no viable alternative at input ‘COPY (’”. The driver reads every result through COPY … TO STDOUT (FORMAT binary), which CrateDB does not have. Its ingest also creates the table with a date column, which CrateDB rejects (“Type date does not support storage”); the ODBC route maps date to timestamp for that reason.
adbcBridge over psqlodbc: all seven steps pass, with the REFRESH TABLE step before the count check that CrateDB’s per-second refresh needs.

One thing for anyone using adbcBridge 0.1.0 with adbc-driver-postgresql also installed: its default auto-delegation handed CrateDB connections to the native driver, which then failed as above. Set adbc.odbc.delegate=never on 0.1.0; 0.1.1 probes the native driver first and falls back to ODBC on its own.

Verified matrix entry, and the full native-vs-ODBC table for all 28 PostgreSQL-wire and MySQL-wire databases with each first error: Where the native PostgreSQL and MySQL ADBC drivers stop on wire-compatible databases — adbcBridge notes

1 Like