Hallo,
folgende Link habe ich gelesen und wollte den dort beschriebenen Tip benutzen:
PostgreSQL: Documentation: Manuals: PostgreSQL 8.1: NOTIFY
Ich erstelle für jede Tabelle eine Regel, das beim Insert und Update jeweils ein Notify vom Server an den Client gesendet wird.
CREATE OR REPLACE RULE notify_only_insert AS
ON INSERT TO test DO
NOTIFY test_insert;
CREATE OR REPLACE RULE notify_only_update AS
ON UPDATE TO test DO
NOTIFY test_update;
Mein Client registiert sich entsprechend:
Register( "test_insert" );
Register( "test_update" );
public void Register(string aTemp) {
aTemp= "listen " + aTemp;
ExecuteNonquery( aTemp);
pgConnection.Notification += new Npgsql.NotificationEventHandler( pgNotificationSupportHelper );
}
private void pgNotificationSupportHelper( Object sender, Npgsql.NpgsqlNotificationEventArgs args ) {
Console.WriteLine( "----" );
Console.WriteLine( "PID: {0}, Condition: {1}", args.PID, args.Condition );
Console.WriteLine( "----" );
}
Es funktioniert auch, wenn ich neue DS einfüge oder ändere, wird der Client informiert!!!
Das Problem ist, das ich pro Registrieung auf ein Notify (hier 2x), es auch dann 2x mitgeteilt bekomme, d.h ich ändere einen DS bekomme ich es 2x mitgeteilt, das besteht auch beim DS neu einfügen.
Bin ich auf 5 Tabellen registriert, bekomme ich das Event 5x von der entsprechenden Tabelle gefeuert.
Registiere ich mich nur auf ein Notify z.B. Register( “test_update” ) bekomme ich das auch dann nur einmal mitgeteilt, wenn sich der DS ändert, entsprechend werde ich nicht informiert wenn ich einen neuen DS einfüge, logisch.
Könnt ihr mir da weiter helfen. Wollte eigentlich je Tabelle auf insert und update überprüfen (momentan 26), bekomme aber dann 52 Meldungen vom Server, das sich nur die eine Tabelle geändert hat.
Die Rückgabewerte von args.PID und args.Condition sind immer die gleichen -> 2028, test_update
Gruss