un HeapTuple représente bien une ligne. HeapTupleHeader contient les données supplémentaires stockées pour chaque ligne (xmin et xmax pour le calcul de visibilité, hint bits ec), mais les données sont stockées après ce header, il faut donc utiliser cette structure pour accéder aux champs. Vous pouvez voir tout le détail dans htup_details.h (HeapTupleData et HeapTupleHeaderData).
Il y a sinon des fonctions permettant de faire la majorité des opérations habituelles avec un HeapTuple.
]]>