PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 10/09/2012 12:37:12

laurentalpha
Membre

[RESOLU] triggers chainés plsql / plsh

Bonjour,

Sur INSERT et UPDATE, je dois lancer un certain nombre de commandes shell. Pas de souci pour l'utilisation de plsh. Cependant, pour ces traitements, je dois récupérer des informations qui se trouvent dans d'autres tables que celle ayant déclenchée le trigger. Vous l'aurez compris, je pourrais lancer une requête psql dans la fonction plsh pour récupérer les informations manquantes, mais je trouve cette solution peu élégante (descendre de postgre au niveau shell pour remonter chercher des informations...), et puis j'aime bien savoir ce qui est possible ou non, découvrant postgresql.

Mon idée est de créer un 1er trigger plsql sur les mêmes évènements de la table, qui sera appelé avant le trigger en plsh (ordre alphabétique). La documentation indique que dans ce cas les entrées/sorties entre triggers sont chainées. Le problème est qu'une fonction trigger doit retourner un type TRIGGER. Comment retourner des champs d'une autre table ou mieux, une liste de champs provenant de plusieurs tables ?

Voici, dans l'idée, ce que j'aimerais pouvoir faire :

CREATE OR REPLACE FUNCTION fct_get_additionals_infos() RETURNS RECORD AS $$
BEGIN
  RETURN SELECT * FROM radreply WHERE radreply.username = NEW.username AND radreply.attribute = 'Framed-IP-Address';
END;
$$ LANGUAGE plpgsql;

Merci pour vos éclairages !

Dernière modification par laurentalpha (10/09/2012 13:13:35)

Hors ligne

#2 10/09/2012 13:07:45

rjuju
Administrateur

Re : [RESOLU] triggers chainés plsql / plsh

Bonjour,

pourquoi ne pas faire cette requête dans un trigger pl/pgsql, et appeler depuis celui-ci une fonction pl/sh avec comme paramètres les champs voulus ?

Hors ligne

#3 10/09/2012 13:12:17

laurentalpha
Membre

Re : [RESOLU] triggers chainés plsql / plsh

Julien,

Effectivement, j'avais oublié la solution la plus simple ! roll
Merci !

Hors ligne

Pied de page des forums