# PgColumnar

> pgColumnar is a column-oriented storage extension for PostgreSQL, implemented as a table access method. A table created USING pgcolumnar stores its data by column, with per-column compression, chunk-group skipping, and a vectorized aggregate path. It targets analytic workloads: large scans, aggregates, and column projections over append-mostly data. It also reads external Parquet and Apache Iceberg tables, from a local path or from object storage.

# pgColumnar

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

[ Try it out! ](<https://github.com/commandprompt/pgcolumnar>) [ Contact Us ](</contact-us/>)

Bringing analytics to PostgreSQL

## 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_](<https://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](/media/images/pgcolumnar-logo.width-1200.format-webp.webp)
    
    
    git clone <https://github.com/commandprompt/pgcolumnar> 
    
    
    cd pgcolumnar make && make install

 **Full build instructions** : [Installation guide](<https://commandprompt.github.io/pgcolumnar/installation/>)

## Frequently Asked Questions

###  Will my existing queries still work? 

* * *

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.

###  Does pgColumnar replace my existing tables? 

* * *

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.

###  What happens to performance once I delete rows? 

* * *

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.

###  Can I still use indexes on a columnar table? 

* * *

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

###  Is pgColumnar production-ready? 

* * *

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

###  Does it support updates and deletes? 

* * *

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.

###  How is data compressed? 

* * *

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](</contact-us/>)

---
[View this page online](https://www.commandprompt.com/products/pgcolumnar/)