Il est parfois nécessaire d'utiliser directement les procédures stockées qui composent les différentes parties de Slony-I™. Slonik n'est pas « magique » ; il est courant qu'une commande Slonik se contente de décider le nœud qui va recevoir la commande et lui envoie une requête SQL qui contient une seule procédure stockée Slony-I™.
Les développeurs de Slony-I™ espèrent que quelqu'un développera des outils graphiques qui constitueront une alternative à Slonik ; il serait alors utile d'envoyer les ordres de configuration directement via les procédures stockées. Si vous comptez vous lancer dans ce projet, il est conseillé d'examiner comment les procédures stockées sont utilisées dans le fichier slonik.c puisqu'il s'agit de l'utilisation la plus correcte de ces fonctions.
Lorsque qu'on corrige des problèmes sur un cluster Slony-I™ « endommagé », il est parfois utile d'utiliser les procédures stockées. C'est particulièrement efficace lorsque la configuration de la table sl_listen est corrompue et que les événements ne se propagent plus correctement. La méthode la « plus simple » pour réparer cela est la suivante :
SELECT _slonycluster.droplisten(li_origin,li_provider,li_receiver) FROM _slonycluster.sl_listen;
SELECT _slonycluster.storelisten(pa_server, pa_server, pa_client) FROM _slonycluster.sl_path;
Le résultat de ces requêtes est la regénération et la propagation des voies d'écoute. En lançant à la main la fonction _slonycluster.storelisten(), on déclenche des évènements STORE_LISTEN qui provoquent l'envoi des voies d'écoute sur les autres nœuds du cluster.
En cas de problème local sur un nœud, si vous ne souhaitez pas propager les corrections (ce qui est assez rare, on cherche en général à réparer l'ensemble du cluster), la requête est la suivante :
SELECT slonycluster.droplisten_int(li_origin,li_provider,li_receiver) FROM _slonycluster.sl_listen;
SELECT _slonycluster.storelisten_int(pa_server, pa_server, pa_client) FROM_slonycluster.sl_path;
Si vous souhaitez ajouter le support de Slony-I™ dans d'autres outils (par exemple : ajouter la réplication dans pgAdmin III™), vous devez savoir clairement quelles fonctions il faut appeler. Le « protocole » normal est le suivant :
La fonction « principale » (par exemple celle sans le suffixe _int) est appelée sur un nœud « adéquat » du cluster Slony-I™.
Dans la plupart des cas, la fonction peut être appelée sur n'importe quel nœud, et elle propage correctement les commandes aux autres nœuds. C'est vrai pour schemadocstorelisten( integer, integer, integer ), par exemple.
Dans d'autres cas, la fonction doit être lancée depuis un nœud particulier car c'est le seul endroit où les données sont valides. Par exemple, schemadocsubscribeset( integer, integer, integer, boolean ) doit être appelée sur le nœud récepteur.
Si la fonction « principale » réussit, alors le changement de configuration est effectué sur le nœud local et un événement est créé avec schemadoccreateevent( name, text ) pour que le changement de configuration soit propagé à tous les autres nœuds du cluster Slony-I™.
Troisièmement, la version _int de la fonction doit être lancée.
Dans certains cas, lorsque les fonctions sont idempotentes, le nœud sur lequel la fonction « principale » est exécutée peut traiter la version _int très tôt.
Au moment où l'événement se propage, les nœuds lancent la version _int, en espérant que tout se passe bien.