An n8n community node that runs SQL and browses the catalog of a Quack on Demand FlightSQL edge — or any Apache Arrow Flight SQL backend (DuckDB, PostgreSQL, Dremio, etc.).
It talks to the edge over raw gRPC (@grpc/grpc-js, pure JavaScript, no native
addon) and decodes Arrow result streams with apache-arrow. The Flight +
FlightSQL protocols are inlined — no .proto files to ship.
| Operation | Description | Input |
|---|---|---|
| Read | SELECT rows (auto-generated SQL) | Tenant → Schema → Table → Columns → Filter → Limit |
| Insert | INSERT rows (single or batch) | Tenant → Schema → Table → Values (JSON) — or auto-map from upstream items |
| Update | UPDATE rows | Tenant → Schema → Table → Values (JSON) → WHERE clause |
| Delete | DELETE rows | Tenant → Schema → Table → WHERE clause |
- Columns dropdowns cascade automatically:
Tenant → Schema → Table → Columns - Insert receives JSON
{"col": value, …}either from theValuesfield or auto-mapped from the input item keys. Multiple input items are batched into a single multi-rowINSERTfor performance. - Update / Delete require a
WHEREclause.rows_affectedis always the real count (obtained via aSELECT COUNT(*)pre-flight).
| Operation | Description |
|---|---|
| Execute | Run a SELECT / RETURNING statement |
| Execute Update | Run INSERT, UPDATE, DELETE, CREATE TABLE, or any DDL |
Empty result sets produce { "success": true, "message": "…" }.
| Operation | Description | Fields shown |
|---|---|---|
| List Tenants | List available tenants (databases) | — |
| List Schemas | List schemas in a tenant | Tenant |
| List Tables | List tables/views in a schema | Tenant → Schema |
| Describe Table | List columns (name, type, nullable) | Tenant → Schema → Table |
All catalog operations use the native FlightSQL commands
(CommandGetCatalogs, CommandGetDbSchemas, CommandGetTables).
Quack on Demand API:
| Field | Default | Purpose |
|---|---|---|
| Host | 127.0.0.1 |
FlightSQL edge hostname or IP |
| Port | 31338 |
FlightSQL edge port |
| Tenant | acme |
Routing tenant |
| Pool | bi |
Routing pool inside the tenant |
| User / Password | admin / admin |
HTTP Basic credentials |
| Superuser | true |
Authenticate against the system realm (bypasses per-statement ACL) |
| Use TLS | true |
Edge listens with TLS (the default) |
| Verify TLS Certificate | false |
When off, the auto-generated self-signed cert is accepted |
Connection test (green checkmark on save) is not available because n8n only supports HTTP-based credential tests for community nodes loaded via
N8N_CUSTOM_EXTENSIONS. To verify connectivity, use Query → Execute withSELECT 1.
Settings → Community Nodes → Install, then enter n8n-nodes-qod.
A self-hosted n8n instance is required (community nodes are not available on
n8n Cloud's verified-only mode unless verified).
git clone https://github.com/starlake-ai/quack-on-demand.git
cp -r quack-on-demand/examples/n8n n8n-nodes-qod
cd n8n-nodes-qod
npm install --legacy-peer-deps --ignore-scripts
npm run buildStart n8n with the custom node loaded:
npm run dev
# → builds TypeScript, starts n8n at http://localhost:5678Or watch-only (recompile on save, restart n8n manually):
npm run dev:watch| Layer | Technology |
|---|---|
| Transport | gRPC (@grpc/grpc-js, pure JS) |
| Serialization | Protocol Buffers (protobufjs, inlined .proto source) |
| Data format | Apache Arrow IPC (apache-arrow) |
| TLS | node:tls — self-signed cert is pinned off the wire when verification is off |
| Proto command | Used for |
|---|---|
CommandStatementQuery |
SELECT, DML, DDL |
CommandGetCatalogs |
List tenants |
CommandGetDbSchemas |
List schemas |
CommandGetTables (+ include_schema) |
List tables, discover columns |
The node is compatible with any FlightSQL server, not just Quack on Demand.
- Self-hosted n8n required. Community nodes cannot be installed on n8n Cloud unless the package is verified.
- One statement per call. The edge executes a single SQL statement; the node does not split multi-statement input.
- No credential connection test. n8n's
N8N_CUSTOM_EXTENSIONSloader only supports HTTP-basedICredentialTestRequest— function-based gRPC tests are not dispatched. UseSELECT 1via the Query resource instead. - DuckLake tables do not support
RETURNING. The node uses a pre-flightSELECT COUNT(*)to report accuraterows_affectedcounts. - Bulk Insert not yet available. QoD's FlightSQL edge currently only
supports
CommandStatementQueryand the catalog commands.DoPut(Arrow streaming) andCommandStatementIngestare not supported by the edge, so bulk ingestion via Arrow is not yet possible. The regular Insert operation already batches multiple input items into a single multi-rowINSERTstatement for good performance. - TLS. When Verify TLS Certificate is off, the edge's self-signed certificate is fetched from the wire and pinned. For production, install a CA-signed certificate and enable verification.
Apache-2.0