- Category
- Developer Tools
- Rank
- No. 831Tools index
- Pricing
- Open Source
- Type
- TOOL
- Builder
- PostHog
- GitHub
- 177 stars
- Latest release
- latest
- Date
About
DuckDB-backed Postgres server — speak the Postgres wire protocol but query with DuckDB's analytical engine.
What it does
DuckGres lets existing PostgreSQL clients run analytical SQL without changing drivers. It translates PostgreSQL syntax where needed, accepts DuckDB syntax as a fallback, and isolates authenticated users in separate database files. It also supports prepared statements, parameterized queries, binary formats, and bulk transfers.
Why it's ranked here
DuckGres is compelling when PostgreSQL client compatibility matters more than PostgreSQL engine parity. Its operational surface goes beyond a protocol adapter: mandatory TLS, worker isolation, rolling control-plane updates, rate limiting, graceful shutdown, detailed metrics, and durable query history make it credible for managed analytical workloads.
What's good
Compatibility is documented feature by feature, including differential tests against PostgreSQL 16 and explicit gaps. The server handles prepared statements, binary encoding, bulk import and export, password authentication over TLS, and per-user storage. Prometheus metrics distinguish admission, worker acquisition, session startup, queries, and metadata proxy traffic.
Tradeoffs
This is not full PostgreSQL. Savepoints, triggers, sequences, materialized views, partitioning, and several specialized types are outside scope or unsupported. Extended-protocol statements with mutation results are deliberately rejected. DuckLake cannot enforce uniqueness, so conflict handling can amplify duplicate keys. The metrics port is fixed and cannot be configured.
How to use it well
Use DuckGres for analytical services that already speak PostgreSQL and benefit from DuckDB execution, especially managed environments needing tenant isolation, worker controls, metrics, and lakehouse catalogs. Validate each required PostgreSQL feature against the compatibility matrix. Do not choose it as a drop-in OLTP database or where exact PostgreSQL transaction and constraint behavior is mandatory.
Technical notes+
README.md describes TLS-only pgwire, per-user DuckDB files, COPY, DuckLake attachment, standalone and control-plane modes, and Prometheus exposure. main.go registers standalone, control-plane, duckdb-service, and reshard-runner modes, with configuration precedence of CLI flags over environment, YAML, and defaults. go.mod defines a Go module using DuckDB bindings, pgx, lib/pq, Arrow, gRPC, Kubernetes clients, OpenTelemetry, and Prometheus; Linux bindings are replaced with PostHog builds. docs/postgres-compatibility.md separates differential coverage, partial support, thin coverage, unsupported behavior, and intentional exclusions. docs/metrics.md specifies metric boundaries and aggregation rules. docs/perf-harness-runbook.md says the performance harness collects signals without a pass/fail gate. docs/design/admin-ui.md explicitly marks the web console as in progress.
Observed
- Primary language
- Go, with the repository declared as a Go module.
- Interface
- Server and CLI exposing PostgreSQL wire protocol compatibility to standard PostgreSQL clients.
- Configuration
- YAML files, environment variables, and CLI flags, with documented precedence.
- Deployment modes
- Standalone, control-plane, DuckDB service, and reshard runner modes.
- Platform bindings
- DuckDB bindings are listed for macOS on amd64 and arm64, Linux on amd64 and arm64, and Windows on amd64.
- Observability
- Prometheus metrics, OpenTelemetry dependencies, durable query history, and performance harness tooling are documented.
- Compatibility testing
- The compatibility matrix cites differential tests comparing DuckGres with PostgreSQL 16, plus unit, transpiler, and real-driver tests.
Read from README.md, go.mod, main.go, docs/metrics.md, docs/perf-harness-runbook.md, docs/postgres-compatibility.md, docs/design/admin-ui.md, docs/design/resharding.md, docs/runbooks/resharding.md.
What it can do
Execute Postgres-compatible SQL queries using DuckDB's analytical engine
SQL queries via Postgres wire protocol → Query results with analytical performance optimizations
Connect existing Postgres client applications to DuckDB backend
Standard Postgres client connections → Database connectivity with DuckDB query execution
Perform analytical queries on columnar data with Postgres syntax
Complex analytical SQL queries → Fast query results optimized for analytics workloads
Process large datasets using DuckDB's vectorized execution engine
Large-scale data queries through Postgres protocol → High-performance query results
Enable Postgres tooling to work with DuckDB's analytical capabilities
Postgres-compatible client tools and applications → Tool integration with DuckDB backend functionality
Tags
Tech Stack
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.
