Email mit Ergebnissen

Ich habe folgende Frage:

ich arbeite mit der auf dem Server liegenden DB, auf die ich wia Internet und mit Hilfe OpenVPN-Klient zugreife.
Am Server wird eine Funktion ausgeführt.
Nach ihrer Ausführung, die eine Weile dauern kann, würde ich gerne eine Email mit Ergebnissen erhalten.
zB:

Es wurden A Zeilen bearbeitet.
B Zeilen wurden aktualisiert.
C Zeilen wurden eingefügt.

Wo A, B und C - Zähler, die einen Bestimmten Wert nach der Funktionsausführung haben werden.

PS Bitte wenn möglich ganz einfach erklären, ich habe nicht lange mit plpgsql zu tun.

Du kannst das z.B. via einer Function in einer untrusted language (pl/perlU, pl/sh, …) machen. Oder Du rufst dort in der Shell Deine Funktionen auf und pipest die Ausgabe in ein Mailprogramm, Beispiel:

psql test -c "select version();" | muttng -s "Ausgabe der DB" kretschmer@localhost -

Musst halt dafür sogen, daß das, was Du sehen willst, ausgegeben wird.


Andreas

Ok, ich glaube ich habe die Frage doof gestellt.
Es ist jetzt so bei mir:

funktion1 (integer, text)

Also wenn ich die Funktion ausführen lasse, sage ich ihr also:
funktion1 (1, ‘‘email@web.de’’).
Am Ende der Funktion:

IF want_mail = 1 THEN

PERFORM notify_me(’‘Import der Linienbelastung beendet.’’,address);

END IF;

Funktion notifi_me, die jemand anderes geschrieben hat sieht so aus, funktioniert mittlerweile aber nicht:

CREATE OR REPLACE FUNCTION notify_me(text, text)
RETURNS text AS
‘#!/bin/sh
echo “$1” | /usr/bin/mail -s $2
EOF’
LANGUAGE ‘plsh’ VOLATILE;

Also ich möchte jetzt

  1. dass notifi_me mir doch die Email schickt
  2. Anstatt ‘‘Import der Linienbelastung beendet.’’ schreibt mir “A Zeilen wurden bearbeitet …”. (wie soll es aussehen: PERFORM notify_me(A+“Zeilen wurden bearbeitet.”+B+" Zeilen wurden aktualisiert. “+C+” Zeilen wurden eingefügt.",address); oder so??)

‘Funktioniert nicht’, oft gepaart mit ‘Fehlermeldung ungelesen wechgeklickt’, ist so in etwas das häufigste, was man als Admin von 7-16:30 werktags zu hören bekommt. Ich brauch das einklich nicht auch noch in der Freizeit. Was man braucht, sind konkrete Fehlermeldungen.

Also ich möchte jetzt

  1. dass notifi_me mir doch die Email schickt
  2. Anstatt ‘‘Import der Linienbelastung beendet.’’ schreibt mir “A Zeilen wurden bearbeitet …”. (wie soll es aussehen: PERFORM notify_me(A+“Zeilen wurden bearbeitet.”+B+" Zeilen wurden aktualisiert. “+C+” Zeilen wurden eingefügt.",address); oder so??)

Um Zeichenketten und Variablen zu konkatieren, verwendet man nicht +, sondern ||.

Andreas

Hallo,

Mir fehlt es an der elementaren Syntaxkentnis.

wie lass ich eine Funktion ausführen?:

testdb=# notify_me(‘text’,‘email@web.de’)

oder

testdb=# \g notify_me(‘text’,‘email@web.de’)

anscheinend weder noch.

select notify_me(‘text’,‘email@web.de’);

Andreas

Hallo Andreas,

hier ist “die konkrete” Fehlermeldung, die ich bekomme.

ERROR: notify_me: mail: You must specify direct recipients with -s, -c, or -b
/tmp/.pgplsh-8tEARh: EOF: command not found

Anja.

Gruß aus einem INET-Kaffee :wink:

erste Zeile: das mail-kommando erwartet als Parameter einen Empfänger
zweite zeile: lösche mal das EOF

Ich hab hier nur eine Sinnlos eXPerimental-Kiste ohne OS…

Andreas

Allgemein:

PL/sh ist nix weiter als ein Interface zur Shell. Alles, was dort funktioniert,
kannst Du dann als PL/sh - Funktion aus PG heraus aufrufen, du mußt nur den Inhalt der Funktion in die passende Syntax kapseln.

Ich vermute mal, Dein ‘mail’ hat sich in der Syntax wie und warum auch immer verändert. Prüf das mal. Alternativ: ich verwende als Mailprogramm ‘mutt’ bzw. ‘muttng’. Das kann man auch im Batch-Mode nutzen und das kann da auch z.B. Anhänge mitschicken. Daher hatte ich das auch in meinem Beispiel.

Andreas

Hallo Andreas!

Vielen Dank!
Die Emails verschickende Funktion sieht jetzt also folgendermaßer aus:

CREATE OR REPLACE FUNCTION notify_me(text, text)
RETURNS text AS
‘#!/bin/sh
echo $1 | /usr/bin/mail -s “Regiosustain Benachrichtigung” $2’
LANGUAGE ‘plsh’ VOLATILE;

Das Problem bestand darin, dass die Funktion nur von den Uni-Domains aus nicht funktioniert hat.