Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Listen/Notify

  1. #1
    jga
    jga ist offline Neuer Benutzer
    Registriert seit
    07.10.2011
    Beiträge
    7

    Frage Listen/Notify

    Hallo liebe PG Leute,
    ich habe eine frage. Und zwar habe ich eine Tabelle users in der Userdaten liegen.
    Ale Beispiel folgende Tabelle:

    uid|vorname|nachname|geburtsdatum|picture|zustimmu ng

    Ich habe eine Funktion angelegt:


    Code:
    CREATE OR REPLACE FUNCTION notify_users()
      RETURNS trigger AS
    $BODY$
        BEGIN
            --SELECT pg_notify('mymessage', 'fired by FUNCTION');
            NOTIFY users_changed, 'fired by NOTIFY';
            RETURN NULL;
        END; 
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION notify_users() OWNER TO fhadmin;
    Und ein Trigger
    Code:
    CREATE TRIGGER users_changed after insert or update or delete on users for each row execute procedure notify_users();
    Ich habe dann ein Python Script geschrieben (Nach diesem Beispiel: More advanced topics — Psycopg v2.4.3.dev0 documentation)
    das auf ein Notify wartet. Was auch funktioniert. Ich bekomme jetzt in dem Programm zurück, das sich ein Datensatz geändert hat:

    NOTIFY: 1178 users_changed

    Aber wie bekomme ich raus welcher Datensatz geändert wurde? Kann ich vielleicht den Primärschlüssel zurückgeben?

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jga Beitrag anzeigen
    Hallo liebe PG Leute,
    ich habe eine frage. Und zwar habe ich eine Tabelle users in der Userdaten liegen.
    Ale Beispiel folgende Tabelle:

    uid|vorname|nachname|geburtsdatum|picture|zustimmu ng

    Ich habe eine Funktion angelegt:


    Code:
    CREATE OR REPLACE FUNCTION notify_users()
      RETURNS trigger AS
    $BODY$
        BEGIN
            --SELECT pg_notify('mymessage', 'fired by FUNCTION');
            NOTIFY users_changed, 'fired by NOTIFY';
            RETURN NULL;
        END; 
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION notify_users() OWNER TO fhadmin;
    Und ein Trigger
    Code:
    CREATE TRIGGER users_changed after insert or update or delete on users for each row execute procedure notify_users();
    Ich habe dann ein Python Script geschrieben (Nach diesem Beispiel: More advanced topics — Psycopg v2.4.3.dev0 documentation)
    das auf ein Notify wartet. Was auch funktioniert. Ich bekomme jetzt in dem Programm zurück, das sich ein Datensatz geändert hat:

    NOTIFY: 1178 users_changed

    Aber wie bekomme ich raus welcher Datensatz geändert wurde? Kann ich vielleicht den Primärschlüssel zurückgeben?
    Welche Version?

    Ab 9.0 kannst Du Payload mitgeben.


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    jga
    jga ist offline Neuer Benutzer
    Registriert seit
    07.10.2011
    Beiträge
    7

    Standard

    Hi
    danke für die schnelle Antwort, ja ich verwende gerade 9.0.4
    hast du zufällig einen guten Info Link zu payloads? Oder einen Tipp wie ich das am besten verwende?

  4. #4
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jga Beitrag anzeigen
    Hi
    danke für die schnelle Antwort, ja ich verwende gerade 9.0.4
    hast du zufällig einen guten Info Link zu payloads? Oder einen Tipp wie ich das am besten verwende?
    Doku?

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  5. #5
    jga
    jga ist offline Neuer Benutzer
    Registriert seit
    07.10.2011
    Beiträge
    7

    Standard

    achso, das tue ich doch schon lange. es ist momentan ein String, nur wie bekomme ich dort den Primärschlüssel des Datensatzes rein? Damit ich nachher beim auswerten weiß welcher Datensatz es ist um damit weiterzuarbeiten.
    python script:
    print "Got NOTIFY:", notify.pid, notify.channel, notify.payload
    Ausgabe:
    Got NOTIFY: 1178 users_changed fired by NOTIFY

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jga Beitrag anzeigen
    achso, das tue ich doch schon lange. es ist momentan ein String, nur wie bekomme ich dort den Primärschlüssel des Datensatzes rein? Damit ich nachher beim auswerten weiß welcher Datensatz es ist um damit weiterzuarbeiten.
    python script:

    Ausgabe:
    Variable NEW.<spalte> abfragen?


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    jga
    jga ist offline Neuer Benutzer
    Registriert seit
    07.10.2011
    Beiträge
    7

    Standard

    sorry aber ich bin asoluter newbie ich habe etwas probiert was aber nicht funktioniert:

    Code:
          DECLARE
             payload CHARACTER(5);   
          BEGIN
             payload := NEW.userid
            NOTIFY users_changed, payload;
            --RETURN NULL;
        END;

  8. #8
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von jga Beitrag anzeigen
    sorry aber ich bin asoluter newbie ich habe etwas probiert was aber nicht funktioniert:

    Code:
          DECLARE
             payload CHARACTER(5);   
          BEGIN
             payload := NEW.userid
            NOTIFY users_changed, payload;
            --RETURN NULL;
        END;
    Hast Du den aktuellsten python-Treiber? Payload gibt es auch da noch nicht ewig ...


    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  9. #9
    jga
    jga ist offline Neuer Benutzer
    Registriert seit
    07.10.2011
    Beiträge
    7

    Standard

    Hi, ne das muss an der deklaration von NEW liegen.
    Ich habe den Code noch etwas abgeändert.

    Code:
    DECLARE
    BEGIN
      PERFORM pg_notify('users_changed', TG_TABLE_NAME || ' UserID ' || NEW.userid );
      RETURN new;
    END;
    Es ist so drin. Es kommt der Syntrx Error:ERROR: record "new" has no field "userid"

    Wenn ich das NEW.userid weglasse dann sieht die Zeile so aus:
    Code:
    PERFORM pg_notify('users_changed', TG_TABLE_NAME || ' UserID '  );
    Dann bekomme ich das hier zurück im python script:
    Code:
    Got NOTIFY: 30296 users_changed users
    und keinen Fehler in Postgres

    Das heißt für mich das es an dem NEW Befehl NEW.userid liegt.
    In python rufe ich postgres mit der Klasse psycopg2 das sollte der aktuellste sein.

  10. #10
    achilles_69 ist offline Benutzer
    Registriert seit
    05.07.2006
    Ort
    Bielefeld
    Beiträge
    42

    Standard

    Zitat Zitat von jga Beitrag anzeigen
    Hi, ne das muss an der deklaration von NEW liegen.
    Ich habe den Code noch etwas abgeändert.

    Code:
    DECLARE
    BEGIN
      PERFORM pg_notify('users_changed', TG_TABLE_NAME || ' UserID ' || NEW.userid );
      RETURN new;
    END;
    Es ist so drin. Es kommt der Syntrx Error:ERROR: record "new" has no field "userid"
    Nach Deinem ersten Post heißt das Feld ja auch nicht "userid" sonder "uid"...

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. plpgsql und LISTEN
    Von klaup im Forum Trigger und Funktionen
    Antworten: 1
    Letzter Beitrag: 12.09.2011, 19:16
  2. Frage Server doesn't listen :(
    Von Beetle im Forum Sonstige Installationsprobleme
    Antworten: 12
    Letzter Beitrag: 06.07.2010, 00:47
  3. Notify an View hängen?
    Von otternase im Forum Allgemeines
    Antworten: 5
    Letzter Beitrag: 06.06.2010, 19:17
  4. NOTIFY mit Parameter
    Von tueb im Forum Trigger und Funktionen
    Antworten: 8
    Letzter Beitrag: 05.06.2008, 21:28
  5. Probleme mit Notify-Event
    Von firealarm im Forum Trigger und Funktionen
    Antworten: 1
    Letzter Beitrag: 18.09.2007, 13:50

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum