8.13. Pseudo-Types
Le système de types de PostgreSQL™ contient un certain nombre de
types à usage spécial qui sont collectivement appelés des pseudo-types. Un pseudo-type ne peut être utilisé
comme type d'une colonne de table, mais peut l'être pour déclarer un
argument de fonction ou un type de résultat. Tous les pseudo-types
disponibles sont utiles dans des situations où une fonction ne se
contente pas d'accepter et retourner des valeurs d'un type de données
SQL particulier. Le Tableau 8.20,
« Pseudo-Types » liste les différents pseudo-types.
Tableau 8.20. Pseudo-Types
|
Nom
|
Description
|
|
any
|
Indique qu'une fonction accepte tout type de données, quel
qu'il soit.
|
|
anyarray
|
Indique qu'une fonction accepte tout type tableau (voir la
Section 33.2.5,
« Types et fonctions polymorphes »).
|
|
anyelement
|
Indique qu'une fonction accepte tout type de données (voir
la Section 33.2.5,
« Types et fonctions polymorphes »).
|
|
cstring
|
Indique qu'une fonction accepte ou retourne une chaîne de
caractères C (terminée par un NULL).
|
|
internal
|
Indique qu'une fonction accepte ou retourne un type de
données interne du serveur de bases de données.
|
|
language_handler
|
Une fonction d'appel de langage procédural est déclarée
retourner un language_handler.
|
|
record
|
Identifie une fonction qui retourne un type de ligne non
spécifié.
|
|
trigger
|
Une fonction déclencheur est déclarée comme retournant un
type trigger.
|
|
void
|
Indique qu'une fonction ne retourne aucune valeur.
|
|
opaque
|
Un type de données obsolète qui servait précédemment à tous
les usages cités ci-dessus.
|
Les fonctions codées en C (incluses ou chargées dynamiquement)
peuvent être déclarées comme acceptant ou retournant tout
pseudo-type. Il est de la responsabilité de l'auteur de la fonction
de s'assurer du bon comportement de la fonction lorsqu'un pseudo-type
est utilisé comme type d'argument.
Les fonctions codées en langage procédural ne peuvent utiliser les
pseudo-types que dans les limites imposées par l'implantation du
langage. À ce jour, tous les langages procéduraux interdisent l'usage
d'un pseudo-type comme argument et n'autorisent que void et record comme type de
retours (plus trigger lorsque la fonction
est utilisée comme déclencheur). Certains supportent également les
fonctions polymorphes qui utilisent les types anyarray et anyelement.
Le pseudo-type internal sert à déclarer des
fonctions qui ne sont appelées que par le système en interne, et non
pas directement par une requête SQL. Si une fonction accepte au minimum un
argument de type internal, alors elle ne
peut être appelée depuis SQL. Pour
préserver la sécurité du type de cette restriction, il est important
de suivre la règle de codage suivante : ne jamais créer de fonction
qui retourne un internal si elle n'accepte
pas au moins un argument de type internal.