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 le planificateur et l'exécuteur 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™. 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/file_fdw du répertoire des sources. La page de référence CREATE FOREIGN DATA WRAPPER(7) contient aussi des détails utiles.
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.
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 et l'exécuteur. 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 50.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.