Auf Thema antworten

Du würdest es Dir und anderen leichter machen, das alles zuerst einmal in psql auszutesten, ohne dem PGAdmin und Micosoft-Gedöhns ...


[code]

edb=*# create table bla(id uuid DEFAULT gen_random_uuid (), data text);

CREATE TABLE

edb=*# create or replace function notify_id_trigger() RETURNS trigger AS $$ begin PERFORM pg_notify('new_Id'::text, NEW."id"::text); return new; end; $$ language plpgsql;

CREATE FUNCTION

edb=*# create trigger trg1 after insert or update on bla for each row execute procedure notify_id_trigger();

CREATE TRIGGER

edb=*# insert into bla (data) values ('test');

INSERT 0 1

[/code]


Ein Listener auf 'new_Id' sollte nun eine Notification erhalten haben.




ist der eigentliche Fehler. Deine Tabelle hat Spalte id mit Datentyp UUID, pg_notify erwartet aber (TEXT,TEXT). Das ::text in einer definierten Funktion führt daher einen explizieten CAST auf diesen Datentyp durch.


Wenn Du in der Anwendung den vergebenen ID-Wert wissen willst, könntest Du das einfach haben und den vergebenen Wert einfach als Returnwert definieren:


[code]

edb=*# drop table bla;

DROP TABLE

edb=*# create table bla(id uuid DEFAULT gen_random_uuid (), data text);

CREATE TABLE

edb=*# insert into bla (data) values ('test') returning id;;

                  id                

--------------------------------------

 0da843d8-66f6-48f5-89b2-73c048a9c0b4

(1 row)


INSERT 0 1

edb=*#

[/code]


Zurück
Oben