Posts on PostgreSQL — the database I reach for by default. Practical writing on the parts of Postgres that backend developers use every day: data modeling, indexing, query plans, JSONB, transactions, full-text search, and how to get from a slow query to a fast one.
Practical Postgres-backed queues: SKIP LOCKED for concurrency, LISTEN/NOTIFY for low-latency wake-up, retries, dead-letter, and when to graduate to Kafka.
Practical Postgres locking: SELECT FOR UPDATE, NOWAIT, SKIP LOCKED, advisory locks, isolation levels, and how to debug locking problems.
Practical Postgres JSONB: GIN indexes, jsonb_path queries, partial indexes, when to denormalize vs normalize, and the perf gotchas.
Production Postgres partitioning: range / list / hash, when partitioning helps vs hurts, pg_partman automation, and pitfalls with foreign keys and indexes.
Choosing a Postgres replication topology: streaming for HA, logical for upgrades / cross-cluster, cascading for fanout, and pitfalls in each.
Production hybrid search with Postgres alone: pgvector for semantic, tsvector for lexical, RRF fusion for combining, optional reranker. Performance, tuning, and patterns.
Time-series patterns: vanilla Postgres + time partitioning, TimescaleDB hypertables and continuous aggregates, ClickHouse for OLAP scale, and the decision matrix.
How to use Postgres RLS for multi-tenant safety. Policies, session variables, performance considerations, and the patterns that make RLS a cheap defense-in-depth layer.
Why VACUUM matters, how MVCC creates bloat, autovacuum tuning, bloat detection, pg_repack, and the playbook for keeping Postgres healthy at scale.
Practical Postgres tuning cheat sheet. Config knobs that matter, indexing patterns, reading EXPLAIN ANALYZE BUFFERS, vacuum and bloat, connection pooling, and slow-query diagnostics.