Statistics Objects

Extended statistics objects for multi-column correlation tracking.

Extended statistics objects give the PostgreSQL planner information about correlations between columns that single-column statistics cannot capture.

Basic statistics object

SCHEMA public {
    STATISTICS orders_stats (dependencies, ndistinct, mcv)
        ON customer_id, created_at
        FROM orders;
}
-- emits
CREATE STATISTICS "public"."orders_stats" (dependencies, ndistinct, mcv)
    ON "customer_id", "created_at"
    FROM "public"."orders";

Statistics kinds reference

KindDescription
dependenciesFunctional dependency between columns
ndistinctMulti-column distinct value count
mcvMost common value combinations

Altering statistics target

SCHEMA public {
    STATISTICS orders_stats (dependencies, ndistinct, mcv)
        ON customer_id, created_at
        FROM orders {
        STATISTICS 200;
    }
}
-- emits
ALTER STATISTICS "public"."orders_stats" SET STATISTICS 200;

STATISTICS DEFAULT resets the target (emitted as SET STATISTICS -1).

Diffing behaviour

ChangeSQLSafety
Add statistics objectCREATE STATISTICSSAFE
Change column list or kindsDROP STATISTICS + CREATE STATISTICSDESTRUCTIVE
Change statistics_targetALTER STATISTICS SET STATISTICSSAFE
Remove statistics objectDROP STATISTICSSAFE