The pgvector production stack disassembled — pooler, PITR, HA, index tuning, monitoring
The production checklist · pgvector 0.8

The pgvector production stack,disassembled.

Most pgvector tutorials stop at CREATE INDEX USING hnsw. Here are the 5 pieces you actually need once you cross 10M embeddings.

The 5 things that break at scale

Each item: what breaks if you skip it, and how Rivestack handles it by default.

Pooler

What breaks

A 10k-connection spike from embedder workers crashes Postgres directly. Connection storms take the DB down before your app layer notices.

Rivestack default

PgBouncer in front, 10k pooled to 200 backend, transaction pooling mode by default, session pooling available per-database.

Point-in-Time Recovery (PITR)

What breaks

"Daily backups" only recover you to yesterday. A dropped table at 4pm loses a day of writes. PITR with continuous WAL archiving recovers to any second in the retention window.

Rivestack default

7-day PITR, continuous WAL archiving, sub-second RPO.

High availability

What breaks

A single-node database is a single point of failure. Read traffic on the primary starves the write path. Vector queries with large ef values lock up connections analytics dashboards need.

Rivestack default

HA cluster with streaming replication and automatic failover, separate read-only connection string for offloading analytics.

Index tuning

What breaks

Default HNSW parameters (m=16, ef_construction=64) are a starting point, not a destination. Under-tuned = poor recall. Over-tuned = slow builds and high RAM.

Rivestack default

pgvector 0.8 pre-installed, recall@10 ≈ 0.97 out of the box on a 50M-vector workload.

Monitoring

What breaks

You can't tune what you can't see. The first time you hear about replica lag is when a user complains about stale data.

Rivestack default

Built-in metrics dashboard per database — CPU, memory, connections, replica lag, query throughput, pg_stat_statements and slow query log enabled.

How the defaults hold up

Numbers from the default Rivestack configuration. No custom tuning required.

p99 < 40 ms
read latency on a 50M-vector HNSW index
0.97
recall@10 with default HNSW parameters (m=16, ef=64)
10k → 200
pooled to backend connection saturation headroom

What "managed Postgres" usually ships— and what Rivestack ships

Pooler
Typical managed Postgres
Sold separately or premium add-on
Rivestack
Included, PgBouncer pre-configured
PITR retention
Typical managed Postgres
1–3 days at base tier
Rivestack
7 days default
HA + read replica
Typical managed Postgres
Higher tier only
Rivestack
HA cluster with automatic failover
pgvector version
Typical managed Postgres
Often lags upstream by months
Rivestack
Latest stable (0.8)
Per-database metrics
Typical managed Postgres
Account-wide only or add-on
Rivestack
Built-in dashboard per database
pg_stat_statements
Typical managed Postgres
Sometimes disabled
Rivestack
Enabled by default
Autovacuum tuning
Typical managed Postgres
Default knobs, no per-table tuning
Rivestack
Per-table tuning supported

FAQ

Yes — logical replication from any Postgres 14+ source, or pg_dump + restore for smaller datasets. Migration window is typically 30–60 minutes for databases under 500 GB.

Yes. Free dev tier with 2 GB storage, no credit card. Start free.

Tune HNSW parameters, scale compute, add read replicas, switch pooling modes — all without downtime. Nothing is locked.

Rivestack

Ready to skip the
5-step checklist?

Free database in seconds. Full HA cluster in under 10 minutes. pgvector 0.8, pooler, PITR, HA, metrics — all included in the default.