54. Écrire un wrapper de données distantes

54.1. Fonctions d'un wrapper de données distantes
54.2. Routines callback des wrappers de données distantes
54.3. Fonctions d'aide pour les wrapper de données distantes
54.4. Planification de la requête avec un wrapper de données distantes
54.5. Le verrouillage de ligne dans les wrappers de données distantes

Toutes les opérations sur une table distante sont gérées via un wrapper de données distantes. Ce dernier est un ensemble de fonctions que PostgreSQL appelle. Le wrapper de données distantes est responsable de la récupération des données à partir de le source de données distante et de leur renvoi à l'exécuteur PostgreSQL™. Si la mise à jour de tables distantes doit être supporté, le wrapper doit aussi gérer cela. Ce chapitre indique comment écrire un nouveau wrapper de données distantes.

Les wrappers de données distantes incluent dans la distribution standard sont de bons exemples lorsque vous essayez d'écrire les votres. Regardez dans le sous-répertoire contrib du répertoire des sources. La page de référence CREATE FOREIGN DATA WRAPPER(7) contient aussi des détails utiles.

[Note]

Note

Le standard SQL spécifie une interface pour l'écriture des wrappers de données distantes. Néanmoins, PostgreSQL n'implémente pas cette API car l'effort nécessaire pour cela serait trop important. De toute façon, l'API standard n'est pas encore très adoptée.

54.1. Fonctions d'un wrapper de données distantes

Le développeur d'un FDW doit écrire une fonction de gestion (handler) et, en option, une fonction de validation. Les deux fonctions doivent être écrites dans un langage compilé comme le C en utilisant l'interface version-1. Pour les détails sur les conventions d'appel et le chargement dynamique en langage C, voir Section 35.9, « Fonctions en langage C ».

La fonction de gestion renvoie simplement une structure de pointeurs de fonctions callback qui seront appelées par le planificateur, l'exécuteur et différentes commandes de maintenance. La plupart du travail dans l'écriture d'une FDW se trouve dans l'implémentation de ces fonctions callback. La fonction de gestion doit être enregistrée dans PostgreSQL™ comme ne prenant aucun argument et renvoyant le pseudo-type fdw_handler. Les fonctions callback sont des fonctions en C et ne sont pas visibles ou appelables avec du SQL. Les fonctions callback sont décrites dans Section 54.2, « Routines callback des wrappers de données distantes ».

La fonction de validation est responsable de la validation des options données dans les commandes CREATE et ALTER pour son wrapper de données distantes, ainsi que pour les serveurs distants, les correspondances d'utilisateurs et les tables distants utilisant le wrapper. La fonction de validation doit être enregistrée comme prenant deux arguments : un tableau de texte contenant les options à valider et un OID représentant le type d'objet avec lequel les options sont validées (sous la forme d'un OID du catalogue système où sera stocké l'objet, donc ForeignDataWrapperRelationId, ForeignServerRelationId, UserMappingRelationId ou ForeignTableRelationId). Si aucune fonction de validation n'est fournie, les options ne sont pas vérifiées au moment de la création ou de la modification de l'objet.