- TLS/SSL Support: Add encrypted connections for production use
- MD5 Password Authentication: Support PostgreSQL's MD5-based auth for better security
- SCRAM-SHA-256 Authentication: Modern PostgreSQL authentication method
- Connection Rate Limiting: Prevent brute-force attacks
- Config File Support: Load configuration from YAML/TOML file instead of hardcoding
- Environment Variables: Support
DUCKGRES_PORT,DUCKGRES_DATA_DIR, etc. - Command Line Flags:
--port,--data-dir,--configoptions - Dynamic User Management: Add/remove users without restart
- Binary Format Support: Encode results in binary format for better performance with some clients
- COPY Protocol: Support
COPY FROM/COPY TOfor bulk data loading - Cancel Request Handling: Properly cancel long-running queries (protocol.go, cancel_test.go)
- System Catalog Emulation: Basic
pg_catalogcompatibility for psql-
\dt(list tables) - working -
\l(list databases) - working -
\d <table>(describe table) - working
-
- Information Schema: Emulate PostgreSQL's
information_schema(information_schema.go) - Session Variables: Support
SETcommands (timezone, search_path, etc.) (setshow.go) - Type OID Mapping: Proper PostgreSQL OID mapping for all DuckDB types (types.go)
- Extensions: Load DuckDB extensions on startup
- Hot Reload: Reload config without restart
- Admin Commands:
\duckgres status,\duckgres users, etc. - Docker Image: Official container image (Dockerfile)
- Graceful Shutdown: Finish in-flight queries before shutdown
- DuckDB Per Connection: each connection for each user is a separate duckdb instance
- Connection Limits: Max connections per user and globally (ratelimit.go)
- Prometheus Metrics: Export query count, latency, connection stats (metrics.go, flight_ingress_metrics.go)
- Query Logging: Configurable query logging to file/stdout (querylog.go)
- Slow Query Log: Log queries exceeding threshold
- Health Check Endpoint: HTTP endpoint for load balancer health checks
- Read Replicas: Support read-only replicas using DuckDB's
ATTACH - Multi-Database: Support multiple named databases per user
- Schema Support: PostgreSQL schema emulation
- Unit Tests: Test wire protocol parsing/encoding (protocol_test.go, types_test.go, conn_test.go)
- Integration Tests: Test with various PostgreSQL clients (tests/integration/)
- Compatibility Tests: Run PostgreSQL regression tests (clients_test.go, jdbc_test.go)
- Benchmark Suite: Performance comparison with native PostgreSQL (tests/perf/)
- Federation: Query multiple DuckDB files in single query
- Caching Layer: Redis/memcached for query results
- Query Rewriting: Translate PostgreSQL-specific syntax to DuckDB
- MotherDuck Integration: Support MotherDuck cloud backend
- Parquet Direct Query:
SELECT * FROM 's3://bucket/file.parquet'
- Some PostgreSQL drivers may fail with unsupported OIDs — unknown types fall back to
OidText(types.go) -
\dcommands in psql don't work (need system catalog) - fixed - Transaction isolation may differ from PostgreSQL behavior — documented in README
- Large result sets may cause memory issues (no streaming) — results are streamed row-by-row via
rows.Next()+ server-side cursor emulation (conn.go)
Pick an item from this list and submit a PR! Issues labeled good first issue are great starting points.