Relational engine
Connect PostgreSQL to Excel, Google Sheets, AI and REST
Open-source relational database for complex queries and ACID transactions. Direct, pooled, or any of the 27 hosted-Postgres cards that share this wire protocol.
One connection, every surface
Where your PostgreSQL data can go
- 1 outbound connection
- 0 inbound ports
- read-only · credentials stay put
runs on
- For your team, vendors and partners
-
Excel add-in · refresh on demand
-
Google Sheets add-on · refresh on demand
-
Nova AI ask in plain English · text to SQL
-
Data Viewer share live results · team, vendors, partners · any device
- For apps and systems
-
REST API JSON endpoint · OpenAPI 3.1
-
Power BI Power Query M
-
Scheduled syncs Google Sheets · Airtable · Baserow · SeaTable · Smartsheet · Anvil
- For AI tools
-
AI assistants Claude · Cursor · MCP server
- Delivered to people
-
Alerts & reports Slack · Discord · Email · Webhook
Query Streams reads a PostgreSQL database as live SQL from Microsoft Excel, Google Sheets, Power BI, AI assistants over MCP and a REST endpoint. A self-hosted agent connects out from inside your network on port 5432 — no inbound port, no VPN, no IP allowlist — and it recognises 27 hosted Postgres services by hostname alone, so TLS and the connection-pooler settings that trip other tools up are applied before you ever meet them. The database password stays on the machine you installed the agent on.
- For your team, vendors and partners
-
PostgreSQL to Excel Microsoft Excel · Excel add-in
Pull live PostgreSQL results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
PostgreSQL guide -
PostgreSQL to Google Sheets Sheets add-on
Run a saved PostgreSQL query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
PostgreSQL guide -
Ask Nova about PostgreSQL Nova AI · text to SQL
Ask a question in plain English. Nova already knows your PostgreSQL tables, writes and runs the SQL, explains the answer and charts it — no query to write, no credentials to hand over.
How Nova works -
PostgreSQL to Data Viewer result sharing · team, vendors, partners · phone, tablet, desktop
Share a live PostgreSQL result with anyone — a colleague, a vendor, a partner — as a bookmarkable grid that re-runs fresh when opened, on a phone, a tablet or a desktop. They see the results, never the SQL or the credentials.
How the Data Viewer works - For apps and systems
-
PostgreSQL REST API HTTP endpoint
Publish a PostgreSQL query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
PostgreSQL guide -
PostgreSQL to Power BI Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live PostgreSQL results over HTTPS — no ODBC driver, no database port opened.
How Power BI works -
PostgreSQL to Airtable Automation platform
Sync PostgreSQL rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
PostgreSQL guide -
PostgreSQL to Baserow Automation platform
Feed a Baserow table from PostgreSQL over the REST endpoint — self-hosted or Baserow cloud.
PostgreSQL guide -
PostgreSQL to SeaTable Automation platform
Keep a SeaTable base current with PostgreSQL data without exporting a file or exposing the database.
PostgreSQL guide -
PostgreSQL to Smartsheet Automation platform
Push PostgreSQL results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
PostgreSQL guide -
PostgreSQL to Anvil Anvil Works · App platform
Back an Anvil Python app with PostgreSQL through the REST endpoint instead of embedding database credentials in the app.
PostgreSQL guide - For AI tools
-
PostgreSQL MCP server Claude, Cursor and MCP clients
Give an AI assistant read-only access to PostgreSQL with the schema it needs to write correct SQL — no credentials in the chat.
PostgreSQL guide - Delivered to people
-
PostgreSQL alerts and reports Slack · Discord · Email · Webhook
Put a PostgreSQL query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports work
How it works
5 steps, no inbound firewall change
Install the Network Agent on a machine that can already reach the database. It dials out to us; nothing about Postgres is exposed to the internet.
Paste the connection string from your provider, or type host, port, database, user and password yourself — a postgresql:// URI is pulled apart into the fields for you.
If the host belongs to a service the agent recognises, TLS is switched on and the right pooler behaviour is applied without you choosing anything.
Pick the schemas worth exposing. The one you choose is applied with search_path on every query, so unqualified table names resolve exactly as they do in psql.
Save a query and read it from Excel, Sheets, Power BI, MCP, Nova or REST — and hand it to someone else without handing over the SQL.
Feature deep-dive
What PostgreSQL gives you
It already knows your Postgres host
Managed Postgres is where most connection attempts actually fail, and almost never because of the password. It is a pooler on a port nobody documents, or TLS that the provider requires but the client left off. The agent carries a table of 27 hosted Postgres services and matches on hostname, so those decisions are already made.
- TLS is forced, not offered — if the host matches a known provider the connection is encrypted whether or not the box is ticked.
- Odd ports are expected — Crunchy on 5431, Azure and PlanetScale on 6432, DigitalOcean on 25061, Supabase's transaction pooler on 6543.
- Transaction poolers are handled — PgBouncer and Supavisor in transaction mode break prepared statements. When one is detected the agent turns off statement caching and connection reset instead of failing halfway through your report.
- Neon's pooled endpoint, with -pooler in the middle of the hostname, is recognised as the same database as the direct one.
Numbers survive the trip
A reporting tool that quietly turns an exact number into a floating-point one is worse than a tool that refuses, because you find out at year end. PostgreSQL lets you declare numeric with no precision at all, and that value has no safe float to land in.
- numeric with no declared precision is carried through losslessly rather than rounded into a double.
- So is numeric declared wider than 28 digits — beyond what a fixed decimal can hold, the exact digits are kept.
- json and jsonb arrive as text you can parse, uuid as its lowercase canonical form, interval as an ISO-8601 duration.
- Arrays and composite types come through as their text form rather than being dropped from the result.
Filters stay parameters
When a filter has many values — forty product codes, a list of regions — most tools paste them into the SQL as text. Query Streams binds the whole list as a single PostgreSQL array parameter, so the statement your database sees is the same one every time regardless of how many values the reader picked.
-- One @variable, any number of values, one prepared statement
SELECT region, COUNT(*) AS orders, SUM(total) AS revenue
FROM orders
WHERE status = ANY(@statuses)
AND placed_at >= @since
GROUP BY region
ORDER BY revenue DESC
Shared by every database connector
True of every database connector
- Outbound only — the agent opens one encrypted connection out to Query Streams. No inbound port to forward, no VPN, no IP allowlist, nothing about your database exposed to the internet.
- Credentials stay put — the database username and password live on the machine you installed the agent on. Query Streams never receives them and cannot reach your database on its own.
- Read-only, enforced — one statement at a time, SELECT and friends only. A write is rejected on your own machine before it is ever sent to the server, rather than relying on a permission somebody remembered to set.
- Deploy as many agents as you like — one per site, region or cloud. Every data source they can see arrives in a single dropdown, so nobody has to know which agent hosts what.
What you get once a query is saved
- Share the capability, not the SQL — a colleague or an outside partner can run your query and change its filters without ever seeing the statement behind it.
- Filters from either direction — declare them yourself as @variables, or let the connector spot the literal values already sitting in your WHERE clause and offer those as dropdowns.
- Read it from anywhere — Microsoft Excel, Google Sheets, Power BI, the REST API, AI assistants over MCP, the Query Builder and Nova all read the same saved query.
- Run several at once — five saved queries into five worksheet tabs, streamed concurrently, however large the results.
- Join it to anything else you have connected — another database, a business API, or a folder of files, in one read-only statement.
Cross-source SQL
Join PostgreSQL to the rest of your data
One statement can span PostgreSQL and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.
3 connections · 3 agents
One statement
-- nothing copied, nothing merged, nothing scheduled
SELECT c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM pg_reporting.public.orders1 f
JOIN erp_sql.dbo.customers2 c ON c.id = f.customer_id
JOIN billing.stripe.invoices3 i ON i.customer = c.stripe_id
GROUP BY c.region
ORDER BY invoiced DESC;
The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work
Connection details
What PostgreSQL needs
- Port
- 5432 by default, any port accepted — pooler ports on recognised hosts are already known
- Encryption
- TLS on by default (sslmode=require), and forced regardless of the setting on the 27 recognised hosted providers
- Credentials
- A database username and password, held on the agent. Query Streams never receives them
- Driver
- Npgsql 9.0.3, bundled with the agent — nothing to install on the database server or the client
- Schema
- public unless you pick another; the one you pick is applied with search_path on every query
- Exact numbers
- numeric with no declared precision, or wider than 28 digits, is carried losslessly instead of rounded
- Pooling
- On. Transaction-mode poolers (PgBouncer, Supavisor) are detected and their prepared-statement limits worked around
- Timeouts
- 30 seconds to connect, 30 seconds per statement while streaming
- Read-only
- Enforced on your own machine before the statement is sent to the server
Nothing is copied. The agent runs your SELECT against the live database and streams the rows straight through, so what lands in the spreadsheet is what the database holds at that moment rather than the state of an overnight extract. There is no warehouse in the middle to fall behind and no schedule to miss.
One agent can serve many databases, and you can run as many agents as you have places to put them — one in the office, one in each cloud region. Every data source they can reach shows up in a single dropdown, so the person writing the query never has to know which machine is doing the reaching.
Vendor documentation: www.postgresql.org
FAQ
Questions about PostgreSQL
Which tools can read PostgreSQL data through Query Streams?
All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the database once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.
Do I have to open a firewall port to my PostgreSQL database?
No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the database keeps its existing firewall rules.
Can Query Streams change data in PostgreSQL?
No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.
What does Query Streams need to connect to PostgreSQL?
A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. Port: 5432 by default, any port accepted — pooler ports on recognised hosts are already known. Encryption: TLS on by default (sslmode=require), and forced regardless of the setting on the 27 recognised hosted providers. Credentials: A database username and password, held on the agent. Query Streams never receives them. Driver: Npgsql 9.0.3, bundled with the agent — nothing to install on the database server or the client.
Can I join PostgreSQL to another database in the same query?
Yes — that is a federated query. One statement can reference PostgreSQL and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.
Put PostgreSQL where the work happens
Install the agent, point it at your database, and pick a destination.
Read-only Outbound only Credentials stay on the agent

