43.11. pg_cast
Le catalogue pg_cast stocke les
chemins de conversion de type de donnée, qu'il s'agisse de ceux par
défaut ou ceux définis avec la commande CREATE CAST.
Tableau 43.11. Colonnes de
pg_cast
|
Nom
|
Type
|
Références
|
Description
|
|
castsource
|
oid
|
pg_type
.oid
|
OID du type de données source
|
|
casttarget
|
oid
|
pg_type
.oid
|
OID du type de données cible
|
|
castfunc
|
oid
|
pg_proc
.oid
|
OID de la fonction à utiliser pour réaliser la conversion.
0 si les types de données sont binairement compatibles
(c'est-à-dire si aucune opération n'est nécessaire pour
effectuer la transformation).
|
|
castcontext
|
char
|
|
Indique dans quel contexte la conversion peut être
utilisée. e si seules les
conversions explicites sont autorisées (avec CAST ou ::).
a si les conversions implicites
lors de l'affectation à une colonne sont autorisées, en
plus des conversions explicites. i
si les conversions implicites dans les expressions sont
autorisées en plus des autres cas.
|
Les fonctions de transtypage listées dans pg_cast doivent toujours prendre le type source
de la conversion comme type du premier argument et renvoyer le type
de destination de la conversion comme type de retour. Une fonction de
conversion peut avoir jusqu'à trois arguments. Le deuxième argument,
s'il est présent, doit être de type integer
; il reçoit le modificateur de type associé avec le type de
destination ou -1 s'il n'y en a pas. Le
troisième argument, s'il est présent, doit être de type boolean ; il reçoit true si la
conversion est une conversion explicite, false sinon.
Il est possible de créer une entrée pg_cast dans laquelle les types source et cible
sont identiques si la fonction associée prend plus d'un argument. De
telles entrées représentent les « fonctions
de forçage de longueur » qui forcent l'autorisation des
valeurs du type pour une valeur particulière du modificateur de type.
Néanmoins, à ce jour, l'association de modificateurs de types, qui ne
soient pas ceux par défaut, avec des types de données utilisateur
n'est pas supportée. De ce fait, cette fonctionnalité n'a d'utilité
que pour un petit nombre de types intégrés pour lesquels la syntaxe
du modificateur de type est intégré à leur grammaire.
Quand une entrée pg_cast possède des
types différents pour la source et la cible et une fonction qui prend
plus d'un argument, le transtypage et le forçage de longueur
s'effectuent en une seule étape. Lorsqu'une telle entrée n'est pas
disponible, le forçage vers un type qui utilise un modificateur de
type implique deux étapes, une de transtypage, l'autre pour appliquer
le modificateur.