Do PostgreSQL toasted fields use any per row, in-table space?
Yes, see TOAST in Database Physical Storage


  TOAST usurps two bits of the varlena length word (the high-order bits
  on big-endian machines, the low-order bits on little-endian machines),
  thereby limiting the logical size of any value of a TOAST-able data
  type to 1 GB (230 - 1 bytes). When both bits are zero, the value is an
  ordinary un-TOASTed value of the data type, and the remaining bits of
  the length word give the total datum size (including length word) in
  bytes. When the highest-order or lowest-order bit is set, the value
  has only a single-byte header instead of the normal four-byte header,
  and the remaining bits give the total datum size (including length
  byte) in bytes. As a special case, if the remaining bits are all zero
  (which would be impossible for a self-inclusive length), the value
  is a pointer to out-of-line data stored in a separate TOAST table.
  (The size of a TOAST pointer is given in the second byte of the
  datum.)