PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 13.17 » Langage SQL » Types de données » Types identifiant d'objet

8.19. Types identifiant d'objet

Les identifiants d'objets (OID) sont utilisés en interne par PostgreSQL comme clés primaires de différentes tables système. Le type oid représente un identifiant d'objet. Il existe aussi différents types alias pour un oid nommés regquelquechose. Le Tableau 8.26 en donne un aperçu.

Le type oid est à ce jour un entier non signé sur quatre octets. Il n'est, de ce fait, pas suffisamment large pour garantir l'unicité au sein d'une base de données volumineuse, voire au sein d'une très grosse table.

Le type oid lui-même dispose de peu d'opérations en dehors de la comparaison. Il peut toutefois être converti en entier (integer) et manipulé par les opérateurs habituels des entiers (attention aux possibles confusions entre les entiers signés et non signés dans ce cas).

Les types alias d'OID ne disposent pas d'opérations propres à l'exception des routines spécialisées de saisie et d'affichage. Ces routines acceptent et affichent les noms symboliques des objets système, plutôt que la valeur numérique brute que le type oid utilise. Les types alias permettent de simplifier la recherche des valeurs OID des objets. Par exemple, pour examiner les lignes pg_attribute en relation avec une table ma_table, on peut écrire :

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

plutôt que :

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

Bien que cela semble une bonne solution, c'est un peu trop simplifié. Un sous-select bien plus compliqué peut être nécessaire pour sélectionner le bon OID s'il existe plusieurs tables nommées ma_table dans différents schémas. Le convertisseur de saisie regclass gère la recherche de la table en fonction du paramétrage du parcours des schémas et effectue donc la « bonne recherche » automatiquement. De façon similaire, la conversion d'un OID de table en regclass pour l'affichage d'un OID numérique est aisée.

Tableau 8.26. Types identifiant d'objet

NomRéférenceDescriptionExemple
oidtousidentifiant d'objet numérique564182
regclasspg_classrelation namepg_type
regcollationpg_collationcollation name"POSIX"
regconfigpg_ts_configtext search configurationenglish
regdictionarypg_ts_dicttext search dictionarysimple
regnamespacepg_namespacenamespace namepg_catalog
regoperpg_operatornom d'opérateur+
regoperatorpg_operatoropérateur avec types d'arguments*(integer,​integer) ou -(NONE,​integer)
regprocpg_procnom de fonctionsum
regprocedurepg_procfonction avec les types des argumentssum(int4)
regrolepg_authidnom de rôlesmithee
regtypepg_typenom du type de donnéesinteger

Tous les types alias d'OID pour des objets groupés par schéma acceptent des noms qualifiés par le schéma, et affichent des noms préfixés par un schéma si l'objet ne peut être trouvé dans le chemin de recherche courant sans être qualifié. 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 et regoperator sont plus appropriés. Pour regoperator, les opérateurs unaires sont identifiés en écrivant NONE pour les opérandes non utilisés.

Une propriété supplémentaire de pratiquement tous les types alias d'OID est la création de dépendances. Si une constante d'un de ces types apparaît dans une expression stockée (telle que l'expression par défaut d'une colonne ou une vue), elle crée une dépendance sur l'objet référencé. Par exemple, si une colonne a une expression par défaut nextval('ma_seq'::regclass), PostgreSQL comprend que l'expression par défaut dépend de la séquence ma_seq ; le système ne permet alors pas la suppression de la séquence si l'expression par défaut n'est pas elle-même supprimée au préalable. regrole est la seule exception. Les constantes de ce type ne sont pas autorisées dans ce type d'expressions.

Note

Les types d'alias d'OID ne suivent pas complètement les règles d'isolation des transactions. Le planificateur les traite aussi comme de simples constantes, ce qui pourrait résulter en une planification non optimale.

Un autre type d'identifiant utilisé par le système est xid, ou identifiant de transaction (abrégée xact). C'est le type de données des colonnes système xmin et xmax. Les identifiants de transactions sont stockés sur 32 bits. Dans certains contextes, une variante 64-bit xid8 est utilisée. Contrairement aux valeurs xid, les valeurs xid8 sont strictement à accroissement monotone et ne peuvent être réemployées sur la durée de vie d'une instance de base de données.

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

Le dernier type d'identifiant utilisé par le système est tid, ou identifiant de ligne (tuple). C'est le type de données des colonnes système ctid. Un identifiant de 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ème sont expliquées plus en détail dans la Section 5.5.