Documentation PostgreSQL 9.3.25 > Programmation serveur > PL/Tcl - Langage de procédures Tcl > Les modules et la commande unknown | |
Procédures pour déclencheurs en PL/Tcl | Noms de procédure Tcl |
PL/Tcl dispose du support de chargement automatique de code Tcl lorsqu'il est utilisé. Il reconnaît une table spéciale, pltcl_modules, qui est présumée contenir les modules de code Tcl. Si cette table existe, le module unknown est récupéré de la table et chargé immédiatement dans l'interpréteur Tcl avant la première exécution d'une fonction PL/Tcl dans une session. (Ceci survient séparément pour chaque interpréteur Tcl, si plus d'un est utilisé dans une session ; voir Section 41.4, « Données globales avec PL/Tcl ».)
Alors que le module unknown pourrait réellement contenir tout script d'initialisation dont vous avez besoin, il définit normalement une procédure Tcl unknown qui est appelée lorsque Tcl ne reconnaît pas le nom de la procédure appelée. La version standard de PL/Tcl essaie de trouver un module dans pltcl_modules qui définira la procédure requis. Si une procédure est trouvée, elle est chargée dans l'interpréteur, puis l'exécution est permise avec l'appel original de la procédure. Une deuxième table pltcl_modfuncs fournit un index des fonctions et des modules qui les définissent, de façon à ce que la recherche soit rapide.
La distribution PostgreSQL™ inclut les scripts de support pour maintenir ces tables : pltcl_loadmod, pltcl_listmod, pltcl_delmod ainsi que le source pour le module standard unknown dans share/unknown.pltcl. Ce module doit être chargeable dans chaque base de données initialement pour supporter le mécanisme de chargement automatique.
Les tables pltcl_modules et pltcl_modfuncs doivent être lisibles par tous mais il est conseillé de les laisser modifiables uniquement par le propriétaire, administrateur de la base de données. Pour des raisons de sécurité, PL/Tcl ignorera pltcl_modules (et donc n'essaiera pas de charger le module unknown) sauf s'il appartient à un superutilisateur. Cependant, les droits de modification sur cette table peuvent être données à d'autres utilisateurs si vous avez suffisamment confiance en eux.