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 51.62. 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 |  | OID du namespace qui contient le type | 
typowner | 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 51.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 |  | 
       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 |  | 
       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 |  | 
       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 |  | Fonction de conversion en entrée (format texte) | 
typoutput | regproc |  | Fonction de conversion en sortie (format texte) | 
typreceive | regproc |  | Fonction de conversion en entrée (format binaire), ou 0 s'il n'y en a pas | 
typsend | regproc |  | Fonction de conversion en sortie (format binaire), ou 0 s'il n'y en a pas | 
typmodin | regproc |  | Fonction en entrée de modification du type ou 0 si le type ne supporte pas les modificateurs | 
typmodout | regproc |  | Fonction en sortie de modification du type ou 0 pour utiliser le format standard | 
typanalyze | regproc |  | Fonction ANALYZE personnalisée ou 0 pour
       utiliser la fonction standard | 
typalign | char | 
         Les valeurs possibles sont : 
 
 Note
         Pour les types utilisés dans les tables systèmes il est indispensable
         que les tailles et alignements définis dans
           | |
typstorage | char | 
         
 
        Les colonnes   | |
typnotnull | bool | Représente une contrainte non NULL.  | |
typbasetype | oid |  | 
        S'il s'agit d'un domaine (voir   | 
typtypmod | int4 | 
        Les domaines utilisent ce champ pour
        enregistrer le   | |
typndims | int4 | 
        Le nombre de dimensions de
        tableau pour un domaine sur un tableau (c'est-à-dire dont
          | |
typcollation | oid |  | 
          | 
typdefaultbin | pg_node_tree | 
        Si   | |
typdefault | text | 
        NULL si le type n'a pas de valeur par
        défaut associée. Si   | |
typacl | aclitem[] | Droits d'accès ; voir GRANT et REVOKE pour les détails | 
   Tableau 51.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 51.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 |