[megoldva]Postgresgl NOTIFY -ra hallgatózás Qt5-ben

 ( csfeco | 2015. szeptember 18., péntek - 15:28 )

Sziasztok!

Van egy szép nagy projektem Qt-ben, és a mai napom ráment, teljesen eredménytelenül arra, hogy fogadjak egy NOTIFY jelet a programban (Ubuntu 14.04).

Meghívom a subscribeToNotification(name) metódust, ami true-val visszatér, csatlakozom a notification(...) signal-ra, és ezután, ha kiadom a 'NOTIFY ' SQL parancsot (pl a pgAdminIII-ban), akkor nem történik semmi (a csatlakoztatott slot nem kerül meghívásra).
A Google csak több éves találatokat ad, és azt írják, hogy a kliens könyvtárban volt egy hiba, ami miatt nem megy. Csakhogy ezt a kódrészt több mint egy éve írtam, és akkor mintha működött volna (a talált bejegyzések ennél is régebbiek).
Jól jönne valami tipp.
A kód elérhető:
https://github.com/csikfer/lanview2/blob/master/lv2/lanview.cpp 524.sor
A program, amiből teszteltem:
https://github.com/csikfer/lanview2/tree/master/lv2d
Megjegyzés: A QSqlDatabase objektum egy kicsit bonyolultan áll elő, mivel a rendszer támogatja a többszálú programokat is, de a tesztben csak egy szál van, és így csak egy adatbázis objektum (lanView::pDb), az összes többi sallang inaktív.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Az lv2d megkapja a notificationt?
Postgresből nem lehet valahogy megnézni, hogy kik vannak feliratkozva mire?
Esetleg azt, hogy milyen események triggerelődtek (álgyúval verébre: wireshark)?

Fuszenecker Róbert

Hogy az lv2d megkapja-e, azt nem tudhatom, de hogy ha megkapja annak semmi jele, az biztos. Ha lekérdezem a Qt-t hogy milyen NOTIFY-ken hallgatózok, akkor megkapom, hogy az lv2d nevű csatornán, ami megfelel a várakozásnak.
A prostgresql-ben a NOTIFY és LISTEN leírása nem éppen szájbarágós, de megnézem még egyszer, lekérdezhető-e kik hallgatóznak.
A wireshark-al az a bibi, hogy tudtommal titkosított a kommunikáció, ráadásul a program sokat nyúl az SQL-hez, nehéz lesz abból bármit kihámozni.
Amúgy ez régebben biztosan ment, mert az import szerver üzemmódját ki sem próbálhattam enélkül.

Hogy pontosan hol szúrtam el, még nem világos, de a jelenség a tranzakció kezeléssel függ össze. Ha azt kikapcsolom, akkor megjön az event.

"NOTIFY interacts with SQL transactions in some important ways. Firstly, if a NOTIFY is executed inside a transaction, the notify events are not delivered until and unless the transaction is committed. This is appropriate, since if the transaction is aborted, all the commands within it have had no effect, including NOTIFY."

http://www.postgresql.org/docs/9.0/static/sql-notify.html