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 par un utilisateur.
pg_cast
ne représente pas toutes les conversions de
type que le système connaît, seulement celles qui ne peuvent pas se déduire
à partir de règles génériques. Par exemple, la conversion entre un domaine
et son type de base n'est pas représentée explicitement dans
pg_cast
. Autre exception importante :
« les conversions automatiques d'entrée/sortie », celles réalisées en
utilisant les propres fonctions d'entrée/sortie du type de données pour
convertir vers ou à partir du text
ou des autres types de
chaînes de caractères, ne sont pas représentées explicitement dans
pg_cast
.
Tableau 51.10. Colonnes de pg_cast
Nom | Type | Références | Description |
---|---|---|---|
oid | oid | Identifiant de ligne (attribut caché ; doit être sélectionné explicitement) | |
castsource | oid |
| OID du type de données source |
casttarget | oid |
| OID du type de données cible |
castfunc | oid |
| OID de la fonction à utiliser pour réaliser la conversion. 0 si la méthode ne requiert pas une fonction. |
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.
| |
castmethod | char |
Indique comment la conversion est effectuée.
f signifie que la fonction indiquée dans le champ
castfunc est utilisée.
i signifie que les fonctions d'entrée/sortie sont utilisées.
b signifie que les types sont binairement coercibles, et
que par conséquent aucune conversion n'est nécessaire.
|
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 la validité des valeurs de
ce type pour une valeur particulière du modificateur de type.
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.