Colonnes

Une colonne est soit une colonne utilisateur d'une table donnée soit une des colonnes système suivantes :

oid

L'identifiant objet (object ID) d'une ligne. C'est un nombre automatiquement ajouté par PostgreSQL à toutes les lignes de la table (à moins que la table soit créée WITHOUT OIDS (sans OID), auquel cas cette colonne n'est pas présente).

tableoid

Le OID de la table contenant cette ligne. Cet attribut est particulièrement commode pour les requêtes qui utilisent la hiérarchie héritage, si bien que sans elle, il est difficile de dire de quelle table individuelle la ligne provient. Le tableoid peut être joint contre la colonne oid de pg_class pour obtenir le nom de la table.

xmin

L'identitté (transaction ID) d'une transaction d'insertion pour ce tuple. (Note : un tuple est un état individuel d'une ligne; chaque mise à jour d'une ligne crée un nouveau tuple pour la même ligne logique).

cmin

L'identifiant de commande (partant de zéro) dans une transaction d'insertion.

xmax

L'identité (transaction ID) de la transaction de suppression, ou zero pour un tuple non supprimable. Il est possible, pour ce champ, de ne pas être à zero dans un tuple visible : ce qui indique habituellement que la transaction de suppression n'a pas été réalisée ou qu'un suppression en attente ait été interrompue.

cmax

L'identifiant de commande dans une transaction de suppression, ou zero.

ctid

L'ID du tuple dans sa table. C'est une paire (numéro de block, index de tuple dans un block) qui identifie la localisation physique du tuple. Notez que bien que ctid puisse être utilisé pour localiser le tuple très rapidement un ctid de ligne changera chaque fois qu'il est mis à jour ou déplacé par VACUUM FULL. Donc ctid est plus pratique qu'un long identifiant de ligne. Le OID, ou même mieux un nombre défini par l'utilisateur, sera utilisé pour identifier les lignes logiques.

Les OID sont des quantités de 32bit et son assignées à un compteur de cluster. Donc, c'est une mauvaise habitude de supposer que les OID sont uniques, à moins que vous ne vous assuriez qu'ils soient uniques. La pratique recommandée, quand vous utilisez les OID pour l'identification de lignes, est de créer une contrainte unique sur la colonne OID de chaque table pour laquelle l'OID sera utilisé. Ne supposez jamais que les OID sont uniques au travers des tables; utilisez la combinaison de tableoid et l'OID de ligne si vous avez besoin d'un identifiant pour une grosse base. (Les futures versions de PostgreSQL seront probablement capable de séparer le compteur OID de chaque table, ainsi tableoid devra être inclu pour arriver à un identifiant global unique.)

Les identifiants de transaction sont des quantités de 32bit. Ce n'est pas un problème fatal généré par les procédures de maintenance; voir le Administrator's Guide pour les détails. Cependant, il est imprudent de dépendre uniquement des ID de transaction sur le long terme (plus d'un milliard de transactions).

Les identifiants de commande sont des quantités de 32bit. Ceci crée une limite de 232 (4 milliards) de commandes SQL dans une transaction unique. En pratique cette limite n'est pas un problème --- notez que la limite est un nombre de requêtes SQL, pas un nombre de tuples traités.