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.
Conversion de types pour le stockage de valeurs
Vérifier qu'il y a une correspondance exacte avec la cible.
Dans le cas contraire, essayer de convertir l'expression vers le type
cible. Cela réussira s'il y a une conversion d'affectation (cast)
enregistrée entre ces deux types dans le catalogue
pg_cast
(voir CREATE CAST).
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.
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 valeur atttypmod
de la colonne de destination (en fait, sa valeur déclarée ;
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.8. Conversion de types pour le stockage de character
Pour une colonne cible déclarée comme character(20)
, la
déclaration suivante montre que la valeur stockée a la taille correcte :
CREATE TABLE vv (v character(20)); INSERT INTO vv SELECT 'abc' || 'def'; SELECT v, octet_length(v) FROM vv; v | octet_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 la conversion de text
à
bpchar
est compatible binairement, cette conversion
n'insère aucun appel réel à une fonction). Enfin, la fonction de
taille bpchar(bpchar, integer, boolean)
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.