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

Thema: Benachrichtigen, ob und was sich geändert hat.

  1. #1
    Bubblegum ist offline Neuer Benutzer
    Registriert seit
    12.05.2008
    Beiträge
    27

    Standard Benachrichtigen, ob und was sich geändert hat.

    Hallo,

    ich setze PostgreSQL 8.3 mit VS 2008 und NPGSQL ein. Gibt es eine Möglichkeit, dass ich zentral (pro Client) benachrichtigt werde, wenn in einer festgelegten Tabelle Änderungen (durch andere clients) gemacht werden? Außerdem möchte ich auch, dass die gemachten Änderungen in der Nachricht enthalten sind. Kann man sowas mit PostgreSQL? Und wenn ja, wie mach ich sowas?

    Gruß

    Bubblegum

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

    Standard

    Zitat Zitat von Bubblegum Beitrag anzeigen
    Hallo,

    ich setze PostgreSQL 8.3 mit VS 2008 und NPGSQL ein. Gibt es eine Möglichkeit, dass ich zentral (pro Client) benachrichtigt werde, wenn in einer festgelegten Tabelle Änderungen (durch andere clients) gemacht werden? Außerdem möchte ich auch, dass die gemachten Änderungen in der Nachricht enthalten sind. Kann man sowas mit PostgreSQL? Und wenn ja, wie mach ich sowas?

    Gruß

    Bubblegum
    Siehe Doku zu LISTEN und NOTIFY.


    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
    Bubblegum ist offline Neuer Benutzer
    Registriert seit
    12.05.2008
    Beiträge
    27

    Standard

    In meiner PostgreSQL Dokumentation steht etwas von PQexec nur wo finde ich das?
    Unsinn! PQExec ist schon klar. Aber trotzdem verstehe ich die Dokumentation nicht.
    Gibt es irgendwo vielleicht ein Beispiel mit C# ind NPGSQL?
    Geändert von Bubblegum (16.01.2010 um 12:44 Uhr)

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Ich meine mich zu erinnern, das in der Dokumentation für npgsql entsprechendes drin stand. Aber das kann ich hier nicht testen, ein Kunde von mir hat das npgsql damals eingesetzt.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    Bubblegum ist offline Neuer Benutzer
    Registriert seit
    12.05.2008
    Beiträge
    27

    Standard

    Code:
            conn = new NpgsqlConnection("Server=127.0.0.1;User id=npgsql_tests;password=npgsql_tests;");
            conn.Open();
        
            NpgsqlCommand command = new NpgsqlCommand("listen notifytest;", conn);
            command.ExecuteNonQuery();
            
            conn.Notification += new NotificationEventHandler(NotificationSupportHelper);
            
            
            command = new NpgsqlCommand("notify notifytest;", _conn);
            command.ExecuteNonQuery();
    
            Console.ReadLine();  // To prevent program termination before notification is handled.
    Habe das genauso gemacht wie es in der Doku steht (siehe oben). Leider wird kein Notify ausgelöst!? Muss man vielleicht noch einen Initialisierungsparameter setzen oder so?

  6. #6
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Warum verwendest du einmal "conn" und einmal "_conn"?

    Außerdem ist es wohl eleganter, wenn du das NOTIFY einfach in psql absetzt. Dann weißt du, dass das auch durchgeführt wurde. Zumindest zum Testen vereinfacht das die Sache erheblich.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  7. #7
    Bubblegum ist offline Neuer Benutzer
    Registriert seit
    12.05.2008
    Beiträge
    27

    Standard

    Warum verwendest du einmal "conn" und einmal "_conn"?
    "_Conn" erzeuge ich in meiner Applikation nur einmal und nutze die Connections ausschließlich für "listen". Die "conn's" sind meine temporären Verbindungen pro Datenbankzugriff. Ich habe jetzt festgestellt, dass sobald ich jedesmal listen aufrufe ich auch das notify event bekomme. Ich bekomme es aber nicht dynamisch, was ja eigentlich der Sinn sein sollte, sondern muss immer listen aufrufen!? Was stimmt da noch nicht?

  8. #8
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Hä? Bahnhof.

    Also, in deiner Applikation setzt du ein "LISTEN" auf einen bestimmten Begriff, z. B. auf einen Tabellennamen.

    Dann schreibst du dir einen AFTER Trigger als FOR EACH STATEMENT, der bei INSERT, UPDATE und DELETE ausgelöst wird. In der dort aufgerufenen Funktion löst du das NOTIFY mit dem Tabellennamen aus. Wenn du pl/pgSQL nimmst, stehen dir die Variablen TG_TABLE_SCHEMA und TG_TABLE_NAME zur Verfügung. Andere Programmiersprachen für serverseitige Funktionen handhaben das ähnlich.

    Der Trigger wird bei jeder Operation aufgerufen, die die Tabelle verändert. Dort wird das Notify an deine Applikation gesandt.

    *voila*
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  9. #9
    Bubblegum ist offline Neuer Benutzer
    Registriert seit
    12.05.2008
    Beiträge
    27

    Standard

    Das ist nicht mein Problem, dass Notify Event wird abgesetzt. Auch das Listen greift. Aber nur, wenn ich es immer wieder manuell aufrufe, und gerade das soll doch automatisch gehen. Sonst muss ich ja mit einer Schleife ein Polling machen und genau das will ich ja nicht. Klarer?

  10. #10
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Ich habe dein Problem immer noch nicht verstanden.

    Wann genau bekommst du das Event zugesandt?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Seite 1 von 2 12 LetzteLetzte

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