I added fillfactor with less than 100 to existing table then ran vacuum full to take effect
How to ensure the applied fillfactor is working successfully
A ratio of hot updates in catalog table should higher than value of n_dead_tup or n_tup_upd? Or what ?
While free space on the page is necessary for HOT, it is not sufficient.
If you want to prove fillfactor isn’t buggy I’d suggest contriving a test case instead inspecting complex real data. A table with a single bigint and say 50 fillfactor should be easily visible when inspecting the free space of a page in the heap (not sure of the exact query for this though). There is a page-inspect contrib extension that provides low-level details.
What about pgstattuple.free_space and free_percent?