Only fields stored in-line need to be copied. For fields stored out-of-line in TOAST tables, only the reference to the TOAST entry is copied.
Whether a field is stored out-of-line depends on the size of the value in the field and on the field's data type.
If the tuples are large but only have a few fields - like
some_id integer,
frequently_updated integer,
charblob text
then there's not much point changing anything because updates of frequently_updated
won't generally rewrite the data in charblob
, at least if it's big enough that it's worth caring.
OTOH, if you have a table with lots of fields you'll be rewriting a lot more with each update.
HOT will only help you to a limited extent because a HOT update can only happen when no updated column(s) are part of an index and there's enough free space on the same database page. For wide rows you won't fit many copies on a page even with TOAST, so HOT will be of limited benefit.
It can be worth separating such fields out into separate tables if they're really frequently updated but the rest of the table has wide rows that don't change much.