A PostgreSQL extension that transforms Postgres into a distributed database for high performance at any scale.
Citus is a PostgreSQL extension that transforms PostgreSQL into a distributed database, enabling horizontal scaling across a cluster of nodes. It allows applications to handle high transaction throughputs, run fast analytical queries, and process large volumes of time-series or IoT data while retaining full PostgreSQL compatibility.
Developers and organizations whose PostgreSQL databases are outgrowing a single node, particularly those building multi-tenant SaaS applications, real-time analytics dashboards, time-series data platforms, or microservices requiring scalable state.
Developers choose Citus because it extends PostgreSQL's powerful capabilities—like advanced joins, updates, foreign keys, and extensions—to work at any scale without sacrificing compatibility, allowing complex data-intensive workloads on a single database system where other scalable systems lack PostgreSQL's features.
Distributed PostgreSQL as an extension
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
As an extension, Citus retains all PostgreSQL features—like advanced joins, updates, foreign keys, and extensions such as PostGIS—allowing seamless integration with existing tools and workflows without sacrificing capabilities.
Enables sharding tables across a cluster to combine CPU, memory, and I/O capacity, supporting high transaction throughputs and large datasets, as evidenced by use cases like multi-tenant SaaS and real-time analytics.
The distributed query engine efficiently routes transactional queries to specific shards and parallelizes analytical queries across the cluster, handling both under high concurrency, as described in the architecture section.
Columnar storage significantly reduces data size—e.g., 25 MB vs 651 MB in the README example—and speeds up scan-intensive queries for analytics, though it's limited to append-only workloads.
Setting up and managing a multi-node cluster requires expertise in shard rebalancing, node coordination, and high-availability setups like Patroni, which adds overhead compared to single-node PostgreSQL.
Columnar tables lack support for updates, deletes, and foreign keys, as admitted in the README, restricting them to batch-loaded data unless combined with row-based partitioning.
Schema modifications on distributed tables must be synchronized across all nodes through the coordinator, which can be slower and more prone to issues than on a single database instance.