pgColumnar

Column storage for PostgreSQL, built for fast analytics at scale.

Features

Smaller Storage

Automatically compresses your data using the best method for each column
Cuts storage space by up to 97% compared to normal tables

Faster Queries

Answers totals, counts, and averages almost instantly, and skips scanning data that can't match — reading only what's needed.

Safe & Always Up-to-Date

Fully transactional with enforced data rules, plus zero-downtime schema changes and format switching.

Maintains Itself

Automatic background cleanup and optimization that never slows down active queries, with multi-worker data loading for speed.

Plays Well With Others

Works with popular formats like Parquet and Arrow, reads files from cloud storage directly, and fits right into your existing PostgreSQL setup.

Reliable

Full MVCC, transactions, and savepoint rollback semantics
Unique, primary-key, NOT NULL, and CHECK constraints enforced on insert

Benchmarks

97% smaller on disk than standard row-based tables

13,000x faster on COUNT(*), answered from metadata, no data scanned

600x faster on SUM/AVG over a column

116x faster on indexed lookups using index-only scans

7x faster bulk loads and exports, parallelized across workers

3.4x smaller than row storage at 100M rows — smaller than TimescaleDB and Citus columnar in the same test


Full methodology, hardware specs, and raw numbers: commandprompt.github.io/pgcolumnar/benchmarks

When to use it

- Use pgColumnar Use regular tables
Workload Append-mostly, read-heavy Frequent updates and deletes
Access pattern Wide scans, aggregates, reporting Point lookups, single-row fetches
Table shape Wide tables, queries touch a few columns Queries need most or all columns per row
Data type Compresses well, read more than written Changes constantly, low compression benefit
Example workloads Fact tables, event logs, analytics OLTP, transactional systems

Get It

pgcolumnar-logo

git clone https://github.com/commandprompt/pgcolumnar 
cd pgcolumnar make && make install

Full build instructions: Installation guide

Frequently Asked Questions


Yes. A columnar table is an ordinary PostgreSQL relation. It works with your existing indexes, COPY, pg_dump, replication, and transactions without changes to your queries.


No. It's a table access method you opt into per table (CREATE TABLE ... USING pgcolumnar). Existing heap tables are unaffected, and you can convert a table to or from columnar storage without rewriting it manually.


Aggregates fall back from metadata-only answers to a full scan of the affected row groups until you run pgcolumnar.vacuum. Only the touched groups are affected, not the whole table.


Yes. CREATE INDEX builds standard btree and hash indexes, and index-only scans are supported through a columnar visibility map.


It's currently 1.0alpha2. It's functional and benchmarked, but treat it as pre-production software until a stable release.


Yes, along with unique, primary key, NOT NULL, and CHECK constraints. The storage layout is optimized for append-mostly data, so update-heavy and delete-heavy workloads see less benefit than analytics workloads.


Each column chunk is encoded with the best fit from several type-aware methods (RLE, delta, dictionary, and others), then optionally compressed further with pglz, lz4, or zstd.

More Information

Status: PgColumnar is currently 1.0alpha2 and ready to be tested by the wider world.

Compatibility: PostgreSQL versions 15, 16, 17, 18 (19beta2 validated)
License: MIT to encourage contribution (AI welcome)

Docs: https://commandprompt.github.io/pgcolumnar/

Code: https://github.com/commandprompt/pgcolumnar



Try pgColumnar on your own workload

Talk to the team behind it about your use case, deployment, or support options.

Talk to the Team