8.11. Types identifiants d'objets

Les identifiants d'objets (OID) sont utilisés en interne par PostgreSQL comme clés primaires de différentes tables système. De plus, une colonne système OID est ajoutée aux tables créées par les utilisateurs (sauf si WITHOUT OIDS est indiqué à la création de la table). Le type oid représente un identificateur d'objet Il a aussi différents types alias : regproc, regprocedure, regoper, regoperator, regclass, et regtype. Tableau 8-19 donne un aperçu.

Le type oid est actuellement un entier de quatre octets. Du coup, il n'est pas suffisamment grand garantir l'unicité dans une grosse base de données, où même dans une très grosse table. Du coup, l'utilisation d'une colonne OID comme clé primaire d'une table créée par un utilisateur est déconseillée. Les OID surtout destinés à être des références vers les tables système.

Le type oid lui même dispose de peu d'opérations à part la comparaison. Néanmoins, il peut être transtypé en entier (integer) et manipulé en utilisant les opérateurs habituels des entiers. (Attention aux possibles confusions entre les entiers signés et non signés si vous le faites.)

Les types alias d'OID n'ont pas d'opérations propres, à part des routines d'entrées et sorties spécifiques. Ces routines acceptent et affichent des formes symboliques pour les objets systèmes, plutôt que les valeurs numériques brutes que le type oid utilise. Les types alias permettent une recherche simplifiée de valeurs d'OID pour les objets: par exemple, on peut utiliser 'mytable'::regclass pour obtenir l'OID de la table mytable, plutôt que SELECT oid FROM pg_class WHERE relname = 'mytable'. (En réalité, une commande SELECT plus complexe est nécessaire pour retrouver le bon OID lorsqu'il y a plusieurs tables du même nom dans différents schémas.)

Tableau 8-19. Types identifiants d'objet

NomRéférenceDescriptionExemple
oidtousidentifiant d'objet numérique564182
regprocpg_procnom de fonctionsum
regprocedurepg_procfonction avec les types d'argumentssum(int4)
regoperpg_operatornom d'opérateur+
regoperatorpg_operatoropérateur avec types d'arguments*(integer,integer) ou -(NONE,integer)
regclasspg_classnom de relationpg_type
regtypepg_typenom de type de donnéesinteger

Tous les types alias d'OID acceptent des noms avec un préfixe de schéma, et affichent des noms préfixés par un schémas si l'objet ne peut être trouvé dans le chemin de recherche courant sans préfixe de schéma. Les types alias regproc et regoper n'acceptent que des noms uniques en entrée (sans surcharge), si bien qu'ils sont d'un usage limité. Dans la plupart des cas, regprocedure ou regoperator sont plus appropriés. Pour regoperator, les opérateurs unaires sont identifiés en écrivant NONE pour les opérandes non utilisés.

Un autre type identifiant utilisé par le système est xid, ou identifiant (abrégé xact) de transaction. C'est le type de données des colonnes systèmes xmin et xmax. Les identifiants de transactions sont des quantités sur 32 bits.

Un troisième type identifiant utilisé par le système est cid, ou identifiant de commande. C'est le type de données des colonnes systèmes cmin et cmax. Les identifiants de commandes sont aussi des quantités sur 32 bits.

Un dernier type identifiant utilisé par le système est tid, ou identifiant de tuple (identifiant de ligne). C'est le type de données des colonnes système ctid. Un tuple est une paire (numéro de bloc, index de tuple dans le bloc) qui identifie l'emplacement physique de la ligne dans sa table.

(Les colonnes systèmes sont expliquées plus en détail dans Section 5.2.)