Skip to content

Latest commit

 

History

History
82 lines (63 loc) · 4.53 KB

File metadata and controls

82 lines (63 loc) · 4.53 KB

TODO - Future Enhancements

High Priority

Security

  • 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

Configuration

  • 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, --config options
  • Dynamic User Management: Add/remove users without restart

Protocol Compatibility

  • Binary Format Support: Encode results in binary format for better performance with some clients
  • COPY Protocol: Support COPY FROM/COPY TO for bulk data loading
  • Cancel Request Handling: Properly cancel long-running queries (protocol.go, cancel_test.go)

Compatibility

  • System Catalog Emulation: Basic pg_catalog compatibility 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 SET commands (timezone, search_path, etc.) (setshow.go)
  • Type OID Mapping: Proper PostgreSQL OID mapping for all DuckDB types (types.go)

Features

  • Extensions: Load DuckDB extensions on startup

Operations

  • 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

Medium Priority

Performance

  • DuckDB Per Connection: each connection for each user is a separate duckdb instance
  • Connection Limits: Max connections per user and globally (ratelimit.go)

Monitoring

  • 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

Low Priority

Features

  • Read Replicas: Support read-only replicas using DuckDB's ATTACH
  • Multi-Database: Support multiple named databases per user
  • Schema Support: PostgreSQL schema emulation

Testing

Ideas / Research

  • 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'

Known Issues

  • Some PostgreSQL drivers may fail with unsupported OIDs — unknown types fall back to OidText (types.go)
  • \d commands 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)

Contributing

Pick an item from this list and submit a PR! Issues labeled good first issue are great starting points.