Reviewing the issues and PRs there provides a clue what to expect as this project matures.
Seems like a columnar version of ODBC, for OLAP instead of OLTP.
I'm sure SREs will really love me doing expensive adhoc queries against production postgres /s
I've yet to work in enterprises big enough to have multi cloud data warehouses though, maybe it's more useful in that setting?
Another nice feature one would want from such a program is of course auto complete.
select (up arrow)
will loop through your psql history for commands that started with e.g., . The challenging part is in wide tables and or table with large data. Less is awkward usually so using pspg made it less awkward.
I tried also to with help of ai, to write a plugin for sublime that fits my flow. It worked well but I think I'm more used to psql.
[1]
~/.inputrc
$if psql "\e[A": history-search-backward "\e[B": history-search-forward $endif
edit: formatting
E.g, you donβt need a million tools to connect to the million different application databases when inspecting sources as part of setting up pipelines.
With databow, the query still runs on the target database (unline duckdb), but you get one consistent CLI across different databases: connection profiles, output formats, history, scripting, and import/export behavior.
This is genuinely useful for humans (For example, I regularly juggle 6-7 different database, oltp, olap, search and key-value mixed), and even more useful for AI coding agents, because they don't have to learn and juggle a different CLI and set of flags for every database.
Coincidentally, I wrote an article today on how I use it for similar scenarios. It can fetch from S3, multiple databases at once, and so on.
And you get all the benefits of a database when you need to join or postprocess data from multiple sources.
Iβll still check this out though.
TL;DR
databow is a new open source command-line tool for querying any database that has an ADBC driver. Built in Rust, databow gives you one fast, modern interface to the SQL systems across your entire data stack. Install it with uv tool install databow.
In a typical day, a data engineer might query a local embedded database, a distributed cloud data warehouse, and an enterprise relational database serverβeach with its own CLI. psql, mysql, snowsql, bq, sqlite3: different flags, different output formats, different quirks. Switching between them means relearning syntax and reformatting results. GUI tools exist, but theyβre heavyweight and pull you out of the terminal.
What if one fast, modern CLI could connect to any database?
Today, weβre excited to introduce databowβan open source command-line tool for querying databases with ADBC (Arrow Database Connectivity).
databow is built in Rust for fast queries and a small footprint. It connects to any database that has an ADBC driver, giving you one unified interface for the SQL systems across your entire data stack.
databow works with any database that has an ADBC driver. That includes:
The list keeps growing as the ADBC ecosystem expands.
databow provides a modern REPL with the features youβd expect:
$ databow --driver duckdb
> SELECT * FROM 'sales.parquet' LIMIT 5;
ββββββββββββββ¬ββββββββββ¬βββββββββββ
β date β product β revenue β
ββββββββββββββΌββββββββββΌβββββββββββ€
β 2026-01-15 β Widget β 1250.00 β
β 2026-01-15 β Gadget β 890.50 β
β 2026-01-16 β Widget β 1100.00 β
β 2026-01-16 β Gizmo β 2340.00 β
β 2026-01-17 β Gadget β 756.25 β
ββββββββββββββ΄ββββββββββ΄βββββββββββ
Need to share your query results? Export directly to the format you need:
# Export to CSV
databow --driver postgresql --uri "postgres://localhost/analytics" \
--query "SELECT * FROM monthly_report" \
--output report.csv
# Export to JSON
databow --profile warehouse --query "SELECT * FROM users" \
--output users.json
# Export to Arrow IPC
databow --profile prod-db --query "SELECT * FROM events" \
--output events.arrow
databow isnβt just for interactive use. Itβs designed to fit into scripts and pipelines:
# Execute a query directly
databow --driver duckdb --uri warehouse.db --query "SELECT count(*) FROM logs WHERE level = 'ERROR'"
# Read from a SQL file
databow --driver postgresql --uri "postgres://localhost/analytics" \
--file daily_metrics.sql --output metrics.csv
# Pipe queries from stdin
echo "SELECT version()" | databow --driver postgresql --uri "$DATABASE_URL"
Tired of typing long database connection strings? Save your configurations in ADBC connection profiles and refer to them by name:
# Use a saved profile
databow --profile production-warehouse --query "SELECT * FROM orders"
databow is built on ADBCβthe Arrow Database Connectivity standard from the Apache Arrow project. ADBC provides a vendor-neutral API for database access, similar to what JDBC and ODBC do for legacy connectivity. But ADBC is designed from the ground up to transfer data in the Apache Arrow format. That means:
By building on ADBC, databow benefits from the work of the entire Arrow community. When a new database releases an ADBC driver, databow users get access immediately.
databow ships as a single binary. Install it with uv or Cargo:
# Recommended: install with uv
uv tool install databow
# Alternative: install with Cargo
cargo install databow
Then install the ADBC driver for your database using dbc, the command-line tool for installing and managing ADBC drivers. For example, to install the ADBC driver for DuckDB:
dbc install duckdb
Then start querying:
databow --driver duckdb
Weβre actively working on new features to make databow even more powerful: