Query processing

Demand-pull execution (Volcano model)

Also called: Volcano model, iterator model, pull-based execution

Demand-pull execution means rows flow because the top of the plan asks for them. Each node, when asked for a tuple, asks its own children for tuples, and so on down to the scans. Nothing is pushed; everything is pulled from above, one row at a time.

What this means

Rows move through the plan because the top asks for them, not because the bottom pushes. Each node, when asked for a row, turns and asks its own children, on down to the table scans. Everything is pulled from above, one row at a time, which is exactly why a LIMIT can stop the whole machine early.

Why it matters operationally

This model needs no central scheduler and naturally supports early stopping: a LIMIT simply stops pulling. It also explains why PostgreSQL streams results instead of building the whole answer first, except where a blocking node has to. The classic name comes from the 1990s Volcano research system.

Related & next

← All glossary terms · GUC reference · Error catalog