This series of posts traces the evolution from GIN to RUM to Extended RUM, showing how a single architectural idea—to store more in the index to do less work at query time—unlocks major performance improvements at each step.
Generalized Inverted Index (GIN) is PostgreSQL's answer to the question "how do I index composite values?" — including arrays, JSONB documents, tsvector, and any data type that decomposes into multiple keys per row.
The structure is conceptually simple:
Entry Tree (B-tree of keys)
├── "alice" → Posting List: [(0,1), (3,7), (5,2)]






