Hallo,
ich habe hier eine Testdatenbank, bei der ich mit einem Trigger bei bestimmten Änderungen eine Notify auslösen will. Mache ich dies mittels dem Befehl notify
, so funktioniert das ohne Probleme. Da ich jedoch den Payload variabel benötige, würde ich gerne die Funktion pg_notify
nutzen. Allerdings wird in diesem Fall kein Notify ausgelöst. Mache ich hier etwas falsch?
Trigger:
CREATE TRIGGER alert_notify
AFTER INSERT OR UPDATE
ON public.services
FOR EACH row
EXECUTE PROCEDURE alert_notify();
Funktion:
CREATE OR REPLACE FUNCTION alert_notify()
RETURNS trigger
LANGUAGE plpgsql
AS
$$
begin
if new.failed_count >= new.warn_after then
notify AlertUser, 'Fehler';
PERFORM pg_notify('AlertUser', 'ALERT;' || cast(new.id as varchar));
elsif new.failed_count = 0 and old.failed_count > 0 then
notify AlertUser, 'Gut';
PERFORM pg_notify('AlertUser', 'OK;' || cast(new.id as varchar));
end if;
RETURN NEW;
END;
$$
Und hier das Ergebnis, wenn man die Werte manuell in der Tabelle ändert:
=# LISTEN AlertUser;
LISTEN
Asynchronous notification "alertuser" with payload "Fehler" received from server process with PID 52021.
Asynchronous notification "alertuser" with payload "Gut" received from server process with PID 52021.
Man sieht schön, dass nur die notify
ausgelöst werden (da deutsche Begriffe). Was mache ich hier falsch?
Verwendete Software: PostgreSQL 13.2p1 auf OpenBSD 6.9
Vielen Dank und schöne grüße