Les sous-transactions sont commencées dans des transactions, permettant à de grosses transactions d'être séparées en plusieurs unités plus petites. Les sous-transactions peuvent être validées ou annulées sans affecter leurs transactions parentes, permettant ainsi aux transactions parentes de continuer. Cela permet une gestion plus facile des erreurs, qui est un problème fréquent lors du développement d'applications. Le mot sous-transaction est souvent abrégé en subxact.
   Les sous-transactions peuvent être démarrées explicitement en utilisant
   la commande SAVEPOINT, mais peuvent aussi être
   démarrées d'autres façons, par exemple avec la clause
   EXCEPTION en PL/pgSQL.
   PL/Python and PL/TCL acceptent aussi les sous-transactions explicites.
   Les sous-transactions peuvent aussi être démarrées à partir d'autres
   sous-transactions. La transaction de niveau haut et ses sous-transactions
   forment une hiérarchie ou arbre, ce qui explique pour nous faisons
   référence à la transaction principale avec le terme de transaction de
   niveau haut.
  
Si une sous-transaction est affectée à un identifiant de transaction non virtuel, son identifiant de transaction est nommé un « subxid ». Les transactions en lecture seule ne se voient pas affectées de subxid, mais une fois qu'elles écrivent, elles s'en voient affecter un. Une réaction en chaîne réalise une affectation d'identifiants de transactions non virtuels aux parents de la subxid et ainsi de suite jusqu'à la transaction de niveau haut. Nous nous assurons qu'un xid parent est toujours plus petit que n'importe quel subxid enfants.
   Le xid du parent immédiat de chaque subxid est enregistré dans le répertoire
   pg_subtrans. Aucune entrée n'est faite pour les xid de
   niveau haut vu qu'ils n'ont pas de parent. Aucune entrée n'est fait pour
   les sous-transactions en lecture seule.
  
Quand une sous-transaction valide, toutes les sous-transactions enfants validées ayant des subxid seront considérées sous-validées dans cette transaction. Quand une sous-transaction annule, toutes les sous-transactions enfants seront aussi considérées comme annulées.
   Quand une transaction de niveau haut avec un xid est validée, toutes les
   sous-transactions enfants sous-validées sont aussi enregistrées de façon
   permanente dans le répertoire pg_xact comme étant
   validées. Si la transaction de niveau haut annule, toutes ses
   sous-transactions sont aussi annulées, même si elles étaient sous-validées.
  
   Plus chaque transaction conserve de sous-transactions ouvertes (ni annulées
   ni validées), plus importante sera la surcharge du système de gestion des
   transactions. Jusqu'à 64 sous-transactions peuvent être placées en cache en
   mémoire partagée pour chaque processus serveur. Après cela, la charge des
   entrées/sorties disques augmente significativement à cause des recherches
   supplémentaires dans les entrées subxid de pg_subtrans.