Query pushdown is an optimization in which a query engine sends parts of a query (filters, column selection, aggregations, joins, limits) down to the source system to run there, so only the much smaller result travels back. It cuts network transfer and memory use. In a bridge architecture it also means raw rows never leave the source.
What is query pushdown?
Federated engines such as Trino read from many sources through connectors. Trino’s documentation lists predicate, projection, dereference, aggregation, join, limit and top-N pushdown. With predicate pushdown, for example, the connector hands the WHERE clause to the data source, which evaluates it there.1Source 1 · Trino DocumentationPushdowntrino.io PostgreSQL’s foreign data wrapper does the same between databases: postgres_fdw sends WHERE clauses to the remote server and skips columns the query does not need, to reduce the data transferred.2Source 2 · PostgreSQL Global Development Grouppostgres_fdw: access data stored in external PostgreSQL serverspostgresql.org
Scroll sideways to see the full diagram.
Example: what actually gets sent
-- Question: revenue by plan for the last 30 days
-- Without pushdown: SELECT * FROM invoices; -- every row and column travels
-- With predicate, projection and aggregation pushdown:
SELECT plan, SUM(amount) AS revenue
FROM invoices
WHERE paid_at >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY plan;On a table with millions of invoices, the second form returns a handful of rows. The result is the same either way; only where the work happens changes.
Common misconceptions
- “The whole query is always pushed.” Pushdown is per operation. By default,
postgres_fdwonly sends WHERE clauses that use built-in (and immutable) operators and functions; others are checked locally after the rows are fetched.2Source 2 · PostgreSQL Global Development Grouppostgres_fdw: access data stored in external PostgreSQL serverspostgresql.org - “Pushdown is free.” It moves the work onto the source. Point heavy analytical queries at a read replica, and set rate limits.
- “If the plan looks fast, it was pushed.” Verify it. In Trino, when a predicate is pushed down, the EXPLAIN plan no longer shows a
ScanFilterProjectoperation for it.1Source 1 · Trino DocumentationPushdowntrino.io Withpostgres_fdw,EXPLAIN VERBOSEprints the exact remote SQL.2Source 2 · PostgreSQL Global Development Grouppostgres_fdw: access data stored in external PostgreSQL serverspostgresql.org
How Kimo uses query pushdown
Kimo’s semantic layer compiles every dashboard tile and Ask Kimo question into SQL for the source’s dialect. In Bridge mode, Kimo Bridge runs that SQL on your server under a read-only role and returns only the aggregated result over an outbound-only tunnel. Kimo keeps no copy of your rows, apart from optional short-lived result caches you can switch off. Learn more in the Bridge security model and Cloud, hybrid or Bridge?.
Related terms
- Outbound-only tunnel: how pushed-down queries reach a private database.
- ELT vs ETL: the copy-first alternatives.
- Data residency: why keeping rows at the source can matter.
Frequently asked questions
Is query pushdown the same as a federated query?
Will pushdown overload my production database?
Can joins across two different databases be pushed down?
Sources
2 references- Pushdown (opens in a new tab)Trino Documentationtrino.io
Types of pushdown; predicate pushdown processed by the data source; no ScanFilterProject in EXPLAIN when pushed.
- postgres_fdw: access data stored in external PostgreSQL servers (opens in a new tab)PostgreSQL Global Development Grouppostgresql.org
Remote query optimization; WHERE clauses sent to remote; built-in operators only by default; EXPLAIN VERBOSE shows remote SQL.
External sources were accessed at the time of writing. Kimo product details, customers and figures in examples are illustrative unless a source is cited.






