Skip to Content
Overview

pg Koldstore

Early development — not production-ready

KoldStore is an open-source PostgreSQL extension for forever-growing app tables. It keeps the active working set in the PostgreSQL heap, moves older rows to compressed Parquet you control, and lets supported SELECT queries continue through the original relation using the experimental KoldMergeScan path.

This is different from pg_kalam: pg_kalam is a foreign-data wrapper that talks to a KalamDB server. KoldStore runs inside your PostgreSQL instance and tiers storage for local heap tables.

What you get

TierWhere it livesOptimized for
HotPostgreSQL heap + native indexesActive data, low-latency reads, transactional writes
ColdOpen Parquet (filesystem, S3/MinIO, GCS, Azure)History, cost, retention

Placement is policy-driven (hot_row_limit or age via move_after), not access-frequency measurement. Cold-capable supported reads go through KoldMergeScan so the latest resolved row wins across both tiers. Catch-up clients use koldstore.changes_since over an exclusive seq cursor.

Good fit today

  • Messages and chat history
  • AI memory / conversation transcripts
  • Audit logs and append-heavy events
  • Notifications, activity feeds, IoT telemetry

Not a good fit yet

  • Payment ledgers that need global uniqueness across hot and cold
  • Workloads requiring read-your-own-uncommitted-writes across tiers, SERIALIZABLE, row locks, or native cold-row ON CONFLICT behavior
  • Workloads that need cold point lookups as fast as a B-tree
  • Schema evolution, compaction, and coordinated backup/PITR that are still hardening

Read this section in order

  1. Installation — preload, Docker, from source
  2. Getting Started — first managed table
  3. Under the Hood — WAL capture, mirror, merge scan
  4. Why a Mirror? — WAL transport vs latest-state __cl
  5. Manage & Flush — policies and jobs
  6. Change Feedchanges_since / last_rows
  7. SQL API Reference — every shipped function and GUC
  8. Operations — auto-flush, mirror health
  9. Benchmarks — storage wins, contextual DML, how to re-run with --rows
  10. Status & Limits — honest current boundaries

Source and packaging

Last updated on