The stored email User42@example.test stays unchanged while lower(email) supplies the index key user42@example.test. Keys are computed at creation and maintained on inserts and applicable updates.

A function index precomputes a value at write time

An expression index stores the result of a computation as an index key. A query comparing lower(email) can search those precomputed keys instead of evaluating lower over every table row. This moves work into index creation and maintenance. It does not change the stored email, guarantee that every query uses the index, or make every textual variation a different expression. ...

May 5, 2027 · 4 min · XB Field Notes