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.