The 11 MB the vacuum gave back against a mid-hundreds guess, and the reason: the heap is 1.7 MB and the rest is TOAST, so a migration touching small columns bloats the heap and reuses the toast pointers. The rule keeps its cost estimate rather than its size, and SP8 is the other shape -- it drops toasted columns, and DROP COLUMN frees nothing until a VACUUM FULL. And the handover moves to SP9: what a hand-driven SP7 turned out to be wrong about, the three findings from fixing it, and the fact that the fix itself has not been driven by hand either. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017Dvvqn9ZDR4ixeFPHNbww7