Would be good to have some examples of when you need it, given that PostgreSQL lets you do many migrations without downtime.
Same with adding a NOT NULL constraint without a default value. If there is a (constant) default value, then postgres can do that without blocking, which is pretty cool. That works because it only needs to modify metadata.
Same with changing column types, they need to go over the existing data.