41.30. pg_type

Le catalogue pg_type stocke les informations sur les types de données. Les types de base (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 et représenter ainsi la structure des lignes de la table. Il est aussi possible de créer des types composites avec CREATE TYPE AS .

Tableau 41-30. Colonnes de pg_type

NomTypeRéférencesDescription
typnamename Nom du type
typnamespaceoidpg_namespace .oid OID de l'espace de noms qui contient ce type.
typownerint4pg_shadow .usesysidPropriétaire du type
typlenint2  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.
typbyvalbool  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. Notez que typbyval peut être faux même si la longueur permettrait un passage par valeur ; c'est le cas pour le type float4, par exemple.
typtypechar  typtype vaut b pour un type de base, c pour un type composite (c'est-à-dire le type d'une ligne de table), d pour un domaine ou p pour un pseudo-type. Voir aussi typrelid et typbasetype.
typisdefinedbool  Vrai si le type est défini et faux s'il ne s'agit que d'un remplissage pour un type qui n'est pas encore défini. Lorsque typisdefined est faux, rien à part le nom du type, l'espace de noms et l'OID n'est fiable.
typdelimchar  Caractère qui sépare deux valeurs de ce type lorsque le programme lit les valeurs d'un tableau en entrée. Notez que le délimiteur est associé au type d'élément du tableau, pas au type tableau.
typrelidoidpg_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. Zéro pour les types autres que composites.
typelemoidpg_type .oid Si typelem ne vaut pas 0, 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 oidvector. Si un type de longueur fixe a un typelem, alors sa représentation interne doit être un certain nombre de valeurs de ce 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.
typinputregprocpg_proc .oidFonction de conversion en entrée (format texte).
typoutputregprocpg_proc .oidFonction de conversion en sortie (format texte).
typreceiveregprocpg_proc .oidFonction de conversion en entrée (format binaire), ou 0 s'il n'y en a pas
typsendregprocpg_proc .oidFonction de conversion en sortie (format binaire), ou 0 s'il n'y en a pas
typanalyzeregprocpg_proc.oidFonction ANALYZE personnalisée ou 0 pour utiliser la fonction standard
typalignchar 

typalign est l'alignement requis pour stocker une valeur de ce type. Cela s'applique au stockage sur disque aussi bien 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 spécifié. 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 ce qui signifie qu'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 : 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 disposera la colonne dans une structure représentant une ligne de table.

typstoragechar 

typstorage indique, pour les types varlena (ceux pour lesquels typlen = -1), si le type est préparé pour le TOASTage et quelle stratégie par défaut doit être utilisée 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 valeurs peut être stockée compressée sur place ;

  • x : La valeurs peut être stockée compressée sur place ou stockée dans une relation << secondaire >>.

Notez que 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 d'abord).

typnotnullbool 

typnotnull représente une contrainte non NULL pour ce type. Ceci n'est utilisé que pour les domaines.

typbasetypeoidpg_type .oid

S'il s'agit d'un domaine, (voir typtype), alors typbasetype identifie le type sur lequel celui-ci est basé. Zéro s'il ne s'agit pas d'un domaine.

typtypmodint4 

Les domaines utilisent typtypmod 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.

typndimsint4 

typndims est le nombre de dimensions de tableau pour un domaine qui est un tableau (c'est-à-dire dont typbasetype est un type tableau ; le typelem du domaine correspondra au typelem du type de base). Zéro pour les types autres que les domaines tableaux.

typdefaultbintext 

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.

typdefaulttext 

typdefault est NULL si le type n'a pas de valeur par défaut associée. Si typdefaultbin est non NULL, typdefault doit contenir une version lisible de l'expression par défaut représentée par typdefaultbin. Si typdefaultbin est NULL et si typdefault ne l'est pas, alors typdefault est 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.