The founder of daily.dev asked a public question: can XERJ replicate automatically from Postgres? Yes. A small CDC consumer reads the WAL through a logical-replication slot, and every INSERT, UPDATE, and DELETE flows into XERJ by itself — no reindex jobs. One hybrid query then fuses BM25 and vector rankings server-side.
ARCHITECTURAL COUNT FROM THE RECORDED RUN · SOURCES IN docs/case-studies/daily-dev-postgres-cdc →
A ~20-line SQL bootstrap turns on logical replication; a small Python consumer drains the slot, re-embeds changed rows (EmbeddingGemma via Ollama, 768-dim cosine), and bulk-writes XERJ. Search is one request: XERJ's hybrid query fuses the BM25 ranking and the kNN ranking with reciprocal-rank fusion — no score normalization, no merge code.
THE ONE REQUEST — BM25 + VECTOR, FUSED SERVER-SIDE
$ curl -s localhost:9200/posts/_search -H 'Content-Type: application/json' -d '{ "query": { "hybrid": { "queries": [ { "query": { "match": { "summary": "ditching the JVM search stack for something cheaper" } } }, { "query": { "knn": { "field": "vec", "query_vector": [/* 768-dim */], "num_candidates": 9 } } } ], "fusion": { "type": "rrf", "k": 60 } } } }'
Recorded top-3 for that query — RRF rank-fusion scores, shown as the fused order:
CHANGE POSTGRES, WATCH XERJ FOLLOW — THEN A CRASH-RECOVERY REPLAY
-- in Postgres: UPDATE p7 · INSERT p9 · DELETE p5 $ python3 cdc_sync.py [cdc] synced 2 upserts, 1 deletes to XERJ [('p7','UPDATE'),('p9','INSERT'),('p5','DELETE')] # consumer killed; UPDATE p1 + INSERT p11 happen while it is down $ python3 cdc_stream.py [stream] consuming WAL from confirmed LSN (push, no polling) [stream] UPDATE p1 -> XERJ LSN=27863424 [checkpointing] [stream] INSERT p11 -> XERJ LSN=27863976 [checkpointing]
daily.dev is a motivating party, not a customer. Every output above is recorded from the scripts in the walkthrough — setup.sql, cdc_sync.py, cdc_stream.py — against Postgres 16 + pgvector 0.8.2 in Docker. Four commands reproduce it end to end.
Tell us your table shape and change rate. We'll wire the CDC consumer against a copy of your schema and send you the scripts and the binary.