8.12. 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 ou quand la variable de configuration default_with_oids est configur�e � false. 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.

Note�: Les OID sont inclus par d�faut dans les tables cr��es par un utilisateur dans PostgreSQL 8.0.25. N�anmoins, ce comportement est amen� � changer dans une future version de PostgreSQL. �ventuellement, les tables cr��es par un utilisateur n'incluront pas de colonne syst�me OID sauf si WITH OIDS est sp�cifi� lors de la cr�ation de la table ou lorsque la variable de configuration default_with_oids est initialis�e � true. Si votre application requiert la pr�sence d'une colonne syst�me OID dans une table, elle devrait indiquer WITH OIDS lors de la cr�ation de la table pour s'assurer de sa compatibilit� avec les prochaines versions de PostgreSQL.

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 de l'OID n'ont pas d'op�rations � eux sauf pour les routines sp�cialis�es en entr�e et en sortie. Ces routines sont capables d'accepter et d'afficher des noms symboliques pour les objets syst�mes, plut�t que la valeur num�rique brute que le type oid utiliserait. Les types alias permettent de simplifier la recherche des valeurs OID pour les objets. Par exemple, pour examiner les lignes pg_attribute en relation avec une table matable, vous pourriez �crire

SELECT * FROM pg_attribute WHERE attrelid = 'matable'::regclass;

plut�t que

SELECT * FROM pg_attribute
WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'matable');

Bien que cela ne semble pas si difficile, c'est toujours trop simplifi�. Une sous-s�lection bien plus compliqu� serait n�cessaire pour s�lectionner le bon OID s'il existait plusieurs tables nomm�es matable dans diff�rents sch�mas. Le convertisseur d'entr�es regclass g�re la recherche de la table suivant le param�trage du chemin des sch�mas et il fera donc la <<�bonne recherche�>> automatiquement. De fa�on similaire, convertir une OID d'une table en regclass est facile pour l'affichage symbolique d'un OID num�rique.

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.4.)