brin_summarize_new_values
PG 9.5+→ integerScans a table and updates BRIN index summaries for any page ranges that have not yet been summarized. Returns the number of page ranges updated. Needed after bulk inserts that bypassed the autosummarize mechanism.
Signature
brin_summarize_new_values ( index regclass ) → integerParameters
| Parameter | Type | Description |
|---|---|---|
| index | regclass | Name or OID of the BRIN index |
Examples
5 new page ranges summarized
SELECT brin_summarize_new_values('orders_created_at_brin_idx');5All ranges already summarized
SELECT brin_summarize_new_values('sensor_readings_ts_idx');0Many new ranges after bulk load
-- After bulk COPY insert:
SELECT brin_summarize_new_values('events_time_idx');120Update all BRIN indexes
SELECT indexrelid::regclass, brin_summarize_new_values(indexrelid) AS ranges_updated FROM pg_index WHERE indexrelid::regclass::text LIKE '%brin%';(rows)Log maintenance runs
SELECT brin_summarize_new_values('logs_ts_idx') AS ranges, now() AS ran_at;0 | 2026-03-16 ...REINDEX is a heavyweight operation that locks the table. brin_summarize_new_values() only processes new, unsummarized ranges without locking.
✓ Instead: Use brin_summarize_new_values() for incremental updates after bulk inserts; reserve REINDEX for BRIN corruption or major schema changes.
BRIN indexes use autosummarize to keep up with inserts, but it may lag after large bulk loads. Running brin_summarize_new_values() immediately after a bulk insert ensures the index is fully updated and queries use it efficiently.
COPY events FROM '/data/events_2026.csv'; SELECT brin_summarize_new_values('events_ts_brin_idx');BRIN index updated immediately after bulk loadCommon Gotchas
LIKE is case-sensitive; ILIKE is not — and LIKE is faster
LIKE 'hello%' will not match 'Hello'. Use ILIKE for case-insensitive pattern matching, but expect a performance cost.
Arrays are 1-indexed in PostgreSQL, not 0-indexed
PostgreSQL arrays start at index 1 by default. array[0] returns NULL, not the first element — silently wrong.
Implicit type casts in indexes — your index may not be used
WHERE col = 5 may not use an index on col (text type) because the integer 5 is cast to text, preventing index use.