10.4. Stockage de valeurs

Les valeurs qui doivent être insérées dans une table sont converties vers le type de données de la colonne de destination selon les règles suivantes.

Procédure 10.3. Conversion de types pour le stockage de valeurs

  1. Vérifier qu'il y a une correspondance exacte avec la cible.

  2. Dans le cas contraire, essayer de convertir l'expression vers le type cible. Cela réussira s'il y a une conversion (cast) enregistrée entre ces deux types. Si une expression est de type inconnu, le contenu de la chaîne littérale sera fourni à l'entrée de la routine de conversion pour le type cible.

  3. Vérifier s'il y a une conversion de taille pour le type cible. Une conversion de taille est une conversion d'un type vers lui-même. Si elle est trouvée dans le catalogue pg_cast, appliquez-la à l'expression avant de la stocker dans la colonne de destination. La fonction d'implémentation pour une telle conversion prend toujours un paramètre supplémentaire de type integer, qui reçoit la longueur déclarée de la colonne de destination (en fait, il s'agit de la valeur atttypmod ; l'interprétation de atttypmod varie pour les différents types de données). La fonction de conversion est responsable de l'application de toute sémantique dépendante de la longueur comme la vérification de la taille ou une troncature.

Exemple 10.6. Conversion de types pour le stockage de character

Pour une colonne cible déclarée comme character(20), la déclaration suivante assure que la valeur stockée a la taille correcte :

CREATE TABLE vv (v character(20));
INSERT INTO vv SELECT 'abc' || 'def';
SELECT v, length(v) FROM vv;

          v           | length
----------------------+--------
 abcdef               |     20
(1 row)

Voici ce qui s'est réellement passé ici : les deux types inconnus sont résolus en text par défaut, permettant à l'opérateur || de les résoudre comme une concaténation de text. Ensuite, le résultat text de l'opérateur est converti en bpchar ( « blank-padded char », le nom interne du type de données character (caractère)) pour correspondre au type de la colonne cible (comme les types text et bpchar ont une compatibilité binaire, cette conversion n'insère aucun appel réel à une fonction). Enfin, la fonction de taille bpchar(bpchar, integer) est trouvée dans le catalogue système et appliquée au résultat de l'opérateur et à la longueur de la colonne stockée. Cette fonction de type spécifique effectue le contrôle de la longueur requise et ajoute des espaces pour combler la chaîne.