I came across some unusual behavior with listen. Basically, if you unlisten and listen inside of a transaction, new notices are not picked up right away - but they will show up if you send yourself a notice. It also works as expected if you unlisten, commit, and then re-listen. Tested on 9.1 and 9.2. Demo psql script:
listen abc; \t \! psql -p 5491 -c 'notify abc' select * from pg_listening_channels(); begin; unlisten *; listen abc; commit; \! psql -p 5491 -c 'notify abc' select * from pg_listening_channels(); notify abc; Output of above on 9.1 with psql -e: listen abc; LISTEN Showing only tuples. NOTIFY select * from pg_listening_channels(); abc Asynchronous notification "abc" received from server process with PID 10879. begin; BEGIN unlisten *; UNLISTEN listen abc; LISTEN commit; COMMIT NOTIFY select * from pg_listening_channels(); abc notify abc; NOTIFY Asynchronous notification "abc" received from server process with PID 10882. Asynchronous notification "abc" received from server process with PID 10876. -- Greg Sabino Mullane g...@endpoint.com End Point Corporation PGP Key: 0x14964AC8
signature.asc
Description: Digital signature