8.12. 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é pour une colonne de table, mais il peut être utilisé pour déclarer un argument de fonction ou un type de résultat. Chacun des pseudo-types disponibles est utile dans des situations où le comportement d'une fonction ne correspond pas simplement à accepter ou retourner des valeurs d'un type de données SQL spécifique. Tableau 8-20 liste les pseudo-types existants.

Tableau 8-20. Pseudo-Types

NomDescription
any Indique qu'une fonction accepte n'importe quel type de données, quel qu'il soit.
anyarray Indique qu'une fonction accepte tout type tableau (voir Section 33.2.6).
anyelementIndique qu'une fonction accepte tout type de données. (voir Section 33.2.6).
cstringIndique qu'une fonction accepte ou retourne une chaîne de caractères du langage C (terminée par un NULL).
internalIndique qu'une fonction accepte ou retourne un type de données interne du serveur de bases de données.
language_handlerUne fonction d'appel de langage procédural est déclarée retourner un language_handler.
recordIdentifie une fonction qui retourne un type de ligne non spécifié.
triggerUne fonction trigger est déclarée comme retournant un type trigger.
voidIndique qu'une fonction ne retourne pas de valeur.
opaqueUn 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 dans le produit ou chargées dynamiquement) peuvent déclarer, accepter ou retourner chacun de ces pseudo-types. Il est de la responsabilité de l'auteur de la fonction de s'assurer que la fonction se comporte normalement lorsqu'un pseudo-type est utilisé comme type d'argument.

Les fonctions codées en langage procédural peuvent utiliser les pseudo-types si leur langage le permet. A ce jour, tous les langages interdisent l'usage d'un pseudo-type comme argument, et n'acceptent que void et record comme type retourné (plus trigger lorsque la fonction est utilisée comme trigger). Certains supportent aussi les fonctions polymorphes en utilisant les types anyarray et anyelement.

Le pseudo-type internal sert à déclarer des fonctions qui ne sont appelées que par la base de données en interne, et non pas directement par une requête SQL. Si une fonction a au moins un argument de type internal, alors elle ne peut être appelée depuis SQL. Pour préserver la sécurité de cette restriction, il est important de suivre cette règle de codage: ne créez pas de fonction qui retourne un internal si elle n'a pas au moins un argument de type internal.