Comment puis-je envoyer un e-mail à partir du déclencheur PostgreSQL?
Je l'aide pgsql pour définir un déclencheur, lors de la mise à jour de la table de base de données(changement de statut Finis)
il va automatiquement envoyer un e-mail à l'adresse de messagerie à l'aide de dataset e-mail de la valeur et de sauvegarder cet e-mail dans le serveur
mais je ne sais pas comment écrire en fonction de déclenchement à envoyer des e-mail, et envoyer un courrier électronique au serveur.
Je vous remercie à l'avance
Pg version 9.1, et CentOS 5.8
CREATE OR REPLACE FUNCTION sss()
RETURNS trigger AS
$BODY$begin
if(NEW.publisher== 'aaaa')
then
//send email and save to server 192.168.171.64
end if;
return NEW;
end
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sss()
OWNER TO postgres;
GRANT EXECUTE ON FUNCTION sss() TO postgres;
source d'informationauteur AntiGMO
Vous devez vous connecter pour publier un commentaire.
Voir l'excellente comme d'habitude depesz articleet pg-message de la file d'attente.
L'envoi d'e-mail directement à partir de la base de données ne peut pas être une bonne idée. Que faire si la résolution DNS est lent et tout se bloque pendant 30 secondes puis des fois? Que faire si votre serveur de messagerie est d'avoir une bancale et prend 5 minutes pour accepter les messages? Vous obtiendrez des sessions de base de données accroché dans votre déclencheur jusqu'à ce que vous êtes à
max_connections
et tout à coup vous ne pouvez pas faire quelque chose, mais d'attendre ou de démarrer manuellement l'annulation de transactions.Ce que je recommande est d'avoir votre déclencher
NOTIFY
unÉCOUTER
ing script d'aide qui reste en permanence en cours d'exécution et connecté à la base de données (mais pas dans une transaction).Tous vos déclencheur a à faire est de
INSERT
une ligne dans une file d'attente de table et envoyer unNOTIFY
. Votre script est leNOTIFY
message parce qu'il a enregistré à laLISTEN
pour elle, examine la file d'attente de la table, et fait le reste.Vous pouvez écrire le programme d'assistance quelle que soit leur langue est pratique; j'ai l'habitude d'utiliser Python avec
psycopg2
.Que le script peut envoyer l'e-mail basé sur les informations qu'il trouve dans la base de données. Vous n'avez pas à faire tout le laid mise en forme du texte dans PL/PgSQL, vous pouvez les remplacer par des choses dans un modèle plus puissant langage de script au lieu de cela, et seulement récupérer les données de la variable à partir de la base de données lorsqu'une
NOTIFY
.Avec cette approche, votre aide peut envoyer chaque message et ensuite seulement de supprimer les infos de la file d'attente de table. De cette façon, si il y a des problèmes transitoires avec votre système de messagerie qui provoque l'envoi échoue, vous n'avez pas perdu l'info et peut continuer à tenter de l'envoyer jusqu'à ce que vous réussissiez.
Si vous devez vraiment le faire dans la base de données, voir PgMail.
Cela fonctionne sur Windows si de super-utilisateur postgres. La fonction de déclenchement doit être SECURITY DEFINER. Similaire pour sendmail sur Linux:
~ 60 ms
Vous pouvez utiliser plperlu pour envoyer du courrier.
Cette lien montre un exemple de la façon de l'utiliser sur un déclencheur.
Vous avez la possibilité d'utiliser pgMail (si vous êtes autorisé à installer):
Si vous suivez les instructions sur brandolabs.com il descend à
Je suis d'accord avec @Craig Sonnerie. Vous pouvez coder quelque chose en Python sous 100 lignes de code. Je vous conseille d'utiliser le Python ci-bibliothèques: psycopg2, smtplib. Selon quelle fréquence vous souhaitez être averti des modifications, vous pouvez exécuter une tâche cron (en fonction de votre environnement de travail). De cette façon, vous pouvez regrouper plusieurs changements à la base de données en un seul e-mail plutôt que d'envoyer une notification à chaque fois qu'un changement se produit.