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.27 liste les différents pseudo-types.
Tableau 8.27. Pseudo-Types
Nom | Description |
---|---|
any | Indique qu'une fonction accepte tout type de données, quel qu'il soit. |
anyelement | Indique qu'une fonction accepte tout type de données (voir la Section 36.2.5). |
anyarray | Indique qu'une fonction accepte tout type de tableau (voir la Section 36.2.5). |
anynonarray | Indique que la fonction accepte tout type de données non-array (voir Section 36.2.5). |
anyenum | Indique que la fonction accepte tout type de données enum (voir Section 36.2.5 et Section 8.7). |
anyrange | Indique qu'une fonction accepte tout type de données intervalle (voir Section 36.2.5 et Section 8.17). |
anymultirange | Indique qu'une fonction accepte tout type de données intervalle multiple (voir Section 36.2.5 et Section 8.17). |
anycompatible | Indique qu'une fonction accepte tout type de données, avec une promotion automatique des arguments multiples vers un type de données commun (voir Section 36.2.5). |
anycompatiblearray | Indique que la fonction accepte tout type de données tableau, avec une promotion automatique des arguments multiples vers un type de données commun (voir Section 36.2.5). |
anycompatiblenonarray | Indique que la fonction accepte tout type de données autre que tableau, avec une promotion automatique des arguments multiples vers un type de données commun (voir Section 36.2.5). |
anycompatiblerange | Indique qu'une fonction accepte tout type de données intervalle, avec une promotion automatique des arguments multiples vers un type de données commun (voir Section 36.2.5 et Section 8.17). |
anycompatiblemultirange | Indique qu'une fonction accepte tout type de données intervalle multiple, avec une promotion automatique des arguments multiples vers un type de données commun(voir Section 36.2.5 et Section 8.17). |
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 . |
fdw_handler | Une fonction de gestion pour le wrapper de données distantes
est déclarée retourner un fdw_handler . |
table_am_handler | Un gestionnaire de méthode d'accès de table est déclaré comme retournant table_am_handler . |
index_am_handler | Un gestionnaire pour une méthode d'accès d'index est déclaré
renvoyer index_am_handler . |
tsm_handler | Un gestionnaire de méthode d'échantillonnage est déclaré comme
renvoyant le type tsm_handler . |
record | Identifie une fonction qui prend ou retourne un type de ligne non spécifié. |
trigger | Une fonction trigger est déclarée comme retournant un type
trigger . |
event_trigger | Une fonction pour un trigger d'événement est déclarée comme
renvoyant une donnée de type event_trigger . |
pg_ddl_command | Identifie une représention de commandes DDL qui est disponible pour les triggers d'événement. |
void | Indique qu'une fonction ne retourne aucune valeur. |
unknown | Identifie un type non encore résolu, par exemple une chaîne de texte non décorée. |
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, la plupart des langages procéduraux
interdisent l'usage d'un pseudo-type comme argument et n'autorisent que
void
et record
comme type de retour (plus
trigger
ou event_trigger
lorsque la fonction est
utilisée respectivement comme trigger ou triggers d'événement).
Certains supportent également les fonctions polymorphes qui utilisent les
pseudo-types polymorphes, qui sont décrits ci-dessus et discutés
en détail dans Section 36.2.5.
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
.