Documentation PostgreSQL 14.22 » Internes » Catalogues système » `pg_type`

Précédent | Niveau supérieur | Suivant
52.61. `pg_ts_template` | Sommaire | 52.63. `pg_user_mapping`

## 52.62. `pg_type`

Le catalogue `pg_type` stocke les informations concernant les types de données. Les types basiques et d'énumération (types scalaires) sont créés avec la commande `CREATE TYPE` et les domaines avec `CREATE DOMAIN`. Un type composite est créé automatiquement pour chaque table de la base pour représenter la structure des lignes de la table. Il est aussi possible de créer des types composites avec `CREATE TYPE AS`.

Tableau 52.62. Colonnes de `pg_type`

Type Description
`oid` `oid` Identifiant de ligne
`typname` `name` Nom du type
`typnamespace` `oid` (référence `pg_namespace`.`oid`) OID du namespace qui contient le type
`typowner` `oid` (référence `pg_authid`.`oid`) Propriétaire du type
`typlen` `int2` Pour les types de taille fixe, `typlen` est le nombre d'octets de la représentation interne du type. Mais pour les types de longueur variable, `typlen` est négatif. -1 indique un type « varlena » (qui a un attribut de longueur), -2 indique une chaîne C terminée par le caractère NULL.
`typbyval` `bool` `typbyval` détermine si les routines internes passent une valeur de ce type par valeur ou par référence. `typbyval` doit être faux si `typlen` ne vaut pas 1, 2 ou 4 (ou 8 sur les machines dont le mot-machine est de 8 octets). Les types de longueur variable sont toujours passés par référence. `typbyval` peut être faux même si la longueur permet un passage par valeur.
`typtype` `char` `typtype` vaut `b` pour un type de base, `c` pour un type composite (le type d'une ligne de table, par exemple), `d` pour un domaine, `e` pour un enum, `p` pour un pseudo-type, `r` pour un type range ou `m` pour un type multirange. Voir aussi `typrelid` et `typbasetype`.
`typcategory` `char` `typcategory` est une classification arbitraire de types de données qui est utilisée par l'analyseur pour déterminer la conversion implicite devant être « préférée ». Voir Tableau 52.63
`typispreferred` `bool` Vrai si ce type est une cible de conversion préférée dans sa `typcategory`
`typisdefined` `bool` Vrai si le type est défini et faux s'il ne s'agit que d'un conteneur pour un type qui n'est pas encore défini. Lorsque `typisdefined` est faux, rien, à part le nom du type, le namespace et l'OID, n'est fiable.
`typdelim` `char` Caractère qui sépare deux valeurs de ce type lorsque le programme lit les valeurs d'un tableau en entrée. Le délimiteur est associé au type d'élément du tableau, pas au type tableau.
`typrelid` `oid` (référence `pg_class`.`oid`) S'il s'agit d'un type composite (voir `typtype`), alors cette colonne pointe vers la ligne de `pg_class` qui définit la table correspondante. Pour un type composite sans table, l'entrée dans `pg_class` ne représente pas vraiment une table, mais elle est néanmoins nécessaire pour trouver les lignes de `pg_attribute` liées au type. 0 pour les types autres que composites.
`typsubscript` `regproc` (references `pg_proc`.`oid`) OID de la fonction du gestionnaire des indices, ou zéro si ce type ne supporte pas les indices. Les types qui sont des vrais types tableau ont `typsubscript` = `array_subscript_handler`, mais les autres types pourraient avoir d'autres fonctions de gestion pour implémenter le comportement spécialisé d'indices.
`typelem` `oid` (référence `pg_type`.`oid`) Si `typelem` est différent de zéro, alors il identifie une autre ligne de `pg_type`, définissant le type renvoyé par indice. Ceci devrait valoir zéro si `typsubscript` vaut zéro. Néanmoins, il peut valoir zéro quand `typsubscript` ne vaut pas zéro, si le gestionnaire n'a pas besoin de `typelem` pur déterminer le type de résultat avec indice. Notez qu'une dépendance `typelem` est considéré impliqué un contenu physique du type élément dans ce type ; donc les modifications DDL sur le type élément pourrait être restreint par la présence de ce type.
`typarray` `oid` (référence `pg_type`.`oid`) Si `typarray` est différent de zéro, alors il identifie une autre ligne dans `pg_type`, qui est le type tableau « true » disposant de ce type en élément.
`typinput` `regproc` (référence `pg_proc`.`oid`) Fonction de conversion en entrée (format texte)
`typoutput` `regproc` (référence `pg_proc`.`oid`) Fonction de conversion en sortie (format texte)
`typreceive` `regproc` (référence `pg_proc`.`oid`) Fonction de conversion en entrée (format binaire), ou zéro s'il n'y en a pas
`typsend` `regproc` (référence `pg_proc`.`oid`) Fonction de conversion en sortie (format binaire), ou zéro s'il n'y en a pas
`typmodin` `regproc` (référence `pg_proc`.`oid`) Fonction en entrée de modification du type ou zéro si le type ne supporte pas les modificateurs
`typmodout` `regproc` (référence `pg_proc`.`oid`) Fonction en sortie de modification du type ou zéro pour utiliser le format standard
`typanalyze` `regproc` (référence `pg_proc`.`oid`) Fonction ANALYZE personnalisée ou zéro pour utiliser la fonction standard
`typalign` `char` `typalign` est l'alignement requis pour stocker une valeur de ce type. Cela s'applique au stockage sur disque ainsi qu'à la plupart des représentations de cette valeur dans PostgreSQL. Lorsque des valeurs multiples sont stockées consécutivement, comme dans la représentation d'une ligne complète sur disque, un remplissage est inséré avant la donnée de ce type pour qu'elle commence à l'alignement indiqué. La référence de l'alignement est le début de la première donnée de la séquence. Les valeurs possibles sont : `c` = alignement `char`, aucun alignement n'est nécessaire ; `s` = alignement `short` (deux octets sur la plupart des machines) ; `i` = alignement `int` (quatre octets sur la plupart des machines) ; `d` = alignement `double` (huit octets sur la plupart des machines, mais pas sur toutes).
`typstorage` `char` `typstorage` indique, pour les types varlena (ceux pour lesquels `typlen` = -1), si le type accepte le TOASTage et la stratégie par défaut à utiliser pour les attributs de ce type. Les valeurs possibles sont : `p` (plain) : la valeur doit être stockée normalement (non-varlena types always use this value) ; `e` (external : la valeur peut être stockée dans une relation « secondaire » « TOAST » (si la relation en a une, voir `pg_class.reltoastrelid`) ; `m` (main) : la valeur peut être stockée compressée sur place ; `x` (extended) : la valeur peut être stockée compressée sur place ou stockée dans une relation « secondaire ». `x` is the usual choice for toast-able types. Les colonnes `m` peuvent aussi être déplacées dans une table de stockage secondaire, mais seulement en dernier recours (les colonnes `e` et `x` sont déplacées les premières).
`typnotnull` `bool` Représente une contrainte non NULL.
`typbasetype` `oid` (référence `pg_type`.`oid`) S'il s'agit d'un domaine (voir `typtype`), alors `typbasetype` identifie le type sur lequel celui-ci est fondé. 0 s'il ne s'agit pas d'un domaine.
`typtypmod` `int4` Les domaines utilisent ce champ pour enregistrer le `typmod` à appliquer à leur type de base (-1 si le type de base n'utilise pas de `typmod`). -1 si ce type n'est pas un domaine.
`typndims` `int4` Le nombre de dimensions de tableau pour un domaine sur un tableau (c'est-à-dire dont `typbasetype` est un type tableau). 0 pour les types autres que les domaines sur des types tableaux.
`typcollation` `oid` (référence `pg_collation`.`oid`) `typcollation` spécifie le collationnement du type. Si le type ne supporte pas les collationnemens, cette colonne vaut zéro. Un type de base qui supporte les collationnements aura une valeur différente de zéro, habituellement `DEFAULT_COLLATION_OID` ici. Un domaine sur un type collationnable peut avoir un OID de collationnement différent de celui du type de base si ce dernier a été précisé pour le domaine.
`typdefaultbin` `pg_node_tree` Si `typdefaultbin` n'est pas NULL, ce champ est la représentation `nodeToString()` d'une expression par défaut pour le type. Ceci n'est utilisé que pour les domaines.
`typdefault` `text` NULL si le type n'a pas de valeur par défaut associée. Si `typdefaultbin` est non NULL, ce champ doit contenir une version lisible de l'expression par défaut représentée par `typdefaultbin`. Si `typdefaultbin` est NULL et si ce champ ne l'est pas, alors il stocke la représentation externe de la valeur par défaut du type, qui peut être passée à la fonction de conversion en entrée du type pour produire une constante.
`typacl` `aclitem[]` Droits d'accès ; voir Section 5.7 pour les détails

### Note

Pour les types de données à largeur fixe utilisés dans les tables systèmes, il est critique que la taille et l'alignement définis dans `pg_type` soient en accord avec la façon dont le compilateur placera la colonne dans une structure représentant une ligne de la table.

Tableau 52.63 liste les valeurs de `typcategory` définies par le système. Tout ajout futur à la liste sera aussi une lettre ASCII majuscule. Tous les autres caractères ASCII sont réservés pour les catégories définies par l'utilisateur.

Tableau 52.63. Codes `typcategory`

Code | Catégorie
--- | ---
`A` | Types tableaux
`B` | Types booléens
`C` | Types composites
`D` | Types date/time
`E` | Types enum
`G` | Types géometriques
`I` | Types adresses réseau
`N` | Types numériques
`P` | Pseudo-types
`S` | Types chaînes
`R` | Types range
`T` | Types 'Timespan' (étendue de temps, intervalle)
`U` | Types définis par l'utilisateur
`V` | Types Bit-string
`X` | Type `unknown`