Fragen zu pg_notify (PostgreSQL) und pgsqlGetNotify (PHP)

Hallo Forum,

um Warnmeldungen, die zuvor in einer Tabelle abgelegt wurden, zu erhalten habe ich mit einen Trigger geschrieben. Dieser Trigger erzeugt mit pg_notify einen Event, der von einem PHP-Skript ausgewertet wird. Dort habe ich die Funktion pgsqlGetNotify() verwendet.
Das funktioniert soweit auch ganz gut, solange das Skript im Vordergund auf der Konsole läuft.
Sobald das Skript im Hintergrund laufen soll, stirbt es irgendwann und ich kann bis jetzt nicht herausfinden, woran es liegt.

Meine Frage: Wie lange hält PostgreSQL Verbindungen über ein Netzwerk offen, bzw. wie lange funktioniert die Kombination pg_notify()/pgsqlGetNotify(), wenn alle 10 Sekunden auf einen Event geprüft wird? Macht PostgreSQL nach einer bestimmten Zeit den Laden zu?

Da ich im Moment keinen Plan habe, woran es liegen könnte, gehe ich mal alle Möglichkeiten durch.

Besten Dank im Voraus für die Antworten

Jürgen

Ich habe das noch nicht benutzt, aber eine Antwort wäre ohnehin etwas vage, ohne dass der Script Code bekannt ist. Wahrscheinlich wäre ein PHP Forum besser geeignet, die Frage zu beantworten.

Danke für die Antwort. Mir wäre auch eine vage Antwort recht, dann wüsste ich, in welche Richtung ich gehen könnte.

Aber hier mal der Code des PHP-Skripts:
$dbh = Datenbank_anmelden(“warndienst”);
if (isset($dbh)) {
$dbh->exec(‘LISTEN “wetterdienst_event”’); // those doublequotes are very important
while (1) {
$notify = null;
$notify = $dbh->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000);
if ($notify !== false) {
}
}
}

Trigger:
CREATE FUNCTION public.trwarnzelle()
RETURNS trigger
LANGUAGE ‘plpgsql’
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
IF (TG_OP = ‘DELETE’) THEN
PERFORM pg_notify(‘wetterdienst_event’, ‘DELETE|’ || OLD.warncellid || ‘|’ || OLD.sent || ‘|’ || OLD.identifier || ‘|’ || OLD.effective || ‘|’ || OLD.headline);
RETURN OLD;
ELSIF (TG_OP = ‘UPDATE’) THEN
PERFORM pg_notify(‘wetterdienst_event’, ‘UPDATE|’ || NEW.warncellid || ‘|’ || NEW.sent || ‘|’ || NEW.identifier || ‘|’ || OLD.identifier || ‘|’ || NEW.ii || ‘|’ || OLD.ii || ‘|’ || NEW.effective || ‘|’ || OLD.effective || ‘|’ || NEW.expires|| ‘|’ || OLD.expires);
RETURN NEW;
ELSIF (TG_OP = ‘INSERT’) THEN
PERFORM pg_notify(‘wetterdienst_event’, ‘CREATE|’ || NEW.warncellid || ‘|’ || NEW.sent || ‘|’ || NEW.identifier);
RETURN NEW;
END IF;
RETURN NULL;
END;
$BODY$;

Sorry, aber es lässt sich nicht sauber formatieren.

Hallo an alle, die sich auch den Kopf zerbrochen haben.

Das Problem ist gelöst. Ich habe das PHP-Skript 1:1 in Perl umgesetzt. Bei Lauf des Skriptes kam dann heraus, dass eine Variable nicht mit einem Wert (Nummer der Warnzelle) belegt war und hat das ganze Skript ohne Kommentar terminiert.

Beste Grüße und nochmal Danke fürs Kopf zerbrechen