Because major version upgrades for sensitive infrastructure are just not simple. There is a lot that can go wrong. Postgres lets you do this step manually to avoid losing your production data. I mean look at what happened yesterday with people just installing any update automatically. Critical infrastructure maybe should need a manual process just to make sure people do the right thing
Imagine there are changes to the physical format for example, now you need to make sure all code works with both the new and the old format during the upgrade (as some pages will have been updated and others not). Supporting both versions requires temporary backwards compatibility code, bloating the codebase, and introduces a risk of error and increases the complexity of the system.
Since Postgres prioritises correctness probably more than any other database system I know, I’d guess they don’t want to expose themselves to the risk of error.
Why doesn't postgres automatically (or with one-click confirmation) update all databases on startup when it discovers databases from a previous major version?