49.54. 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(7) et les domaines avec CREATE DOMAIN(7). 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 49.54. Colonnes de pg_type

Nom Type Références Description
oid oid   Identifiant de ligne (attribut caché ; doit être sélectionné explicitement)
typname name   Nom du type
typnamespace oid pg_namespace.oid OID du namespace qui contient le type
typowner oid 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 ou r pour un type range. 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 49.55, « Codes typcategory »
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 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.
typelem oid pg_type.oid Si typelem est différent de zéro, alors il identifie une autre ligne de pg_type. Le type courant peut alors être utilisé comme un tableau contenant des valeurs de type typelem. Un « vrai » type tableau a une longueur variable (typlen = -1), mais certains types de longueur fixe (typlen > 0) ont aussi un typelem non nul, par exemple name et point. Si un type de longueur fixe a un typelem, alors sa représentation interne est composée d'un certain nombre de valeurs du type typelem, sans autre donnée. Les types de données tableau de taille variable ont un en-tête défini par les sous-routines de tableau.
typarray oid 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 pg_proc.oid Fonction de conversion en entrée (format texte)
typoutput regproc pg_proc.oid Fonction de conversion en sortie (format texte)
typreceive regproc pg_proc.oid Fonction de conversion en entrée (format binaire), ou 0 s'il n'y en a pas
typsend regproc pg_proc.oid Fonction de conversion en sortie (format binaire), ou 0 s'il n'y en a pas
typmodin regproc pg_proc.oid Fonction en entrée de modification du type ou 0 si le type ne supporte pas les modificateurs
typmodout regproc pg_proc.oid Fonction en sortie de modification du type ou 0 pour utiliser le format standard
typanalyze regproc pg_proc.oid Fonction ANALYZE personnalisée ou 0 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).

[Note]

Note

Pour les types utilisés dans les tables systèmes il est indispensable que les tailles et alignements définis dans pg_type soient en accord avec la façon dont le compilateur dispose la colonne dans une structure représentant une ligne de table.

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 : la valeur doit être stockée normalement ;

  • e : la valeur peut être stockée dans une relation « secondaire  » (si la relation en a une, voir pg_class.reltoastrelid) ;

  • m : la valeur peut être stockée compressée sur place ;

  • x : la valeur peut être stockée compressée sur place ou stockée dans une relation « secondaire ».

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 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 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 DEFAULT_COLLATION_OID ici. Un domaine sur un type collationnable peut avoir un autre OID de collationnement 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 GRANT(7) et REVOKE(7) pour les détails

Tableau 49.55, « Codes typcategory » 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 49.55. 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