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