Re: NOTIFY in Background Worker
От | Thomas Munro |
---|---|
Тема | Re: NOTIFY in Background Worker |
Дата | |
Msg-id | CAEepm=3SFrBiqE2Jk1cScZTLQdy13emCe-811yqUA5Eaf60uog@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: NOTIFY in Background Worker (Thomas Munro <thomas.munro@enterprisedb.com>) |
Ответы |
Re: NOTIFY in Background Worker
Re: NOTIFY in Background Worker |
Список | pgsql-hackers |
On Sat, Aug 29, 2015 at 9:03 AM, Thomas Munro <thomas.munro@enterprisedb.com> wrote:
For the record, Jacques confirmed off-list that this worked, and I also did a couple of tests.
Is this expected? If so, should it be documented -- perhaps with something like the attached? Alternatively there may be some way to make CommitTransactionCommand do it, though the comments in ProcessCompletedNotifies explain why that was rejected, at least as far as AtCommit_Notify goes.
On Fri, Aug 28, 2015 at 10:30 PM, jacques klein <jacques.klei@googlemail.com> wrote:Hello,
I added a "NOFITY chan" to the SQL arg of an SPI_execute(), (I did it also with just the NOTIFY statement),
but the listeners (other workers) don't get the notification until a "NOTIFY chan" is done for example with pgadmin,
They don't get lost, just not emited after the "not forgotten" call of CommitTransactionCommand().
Is this normal ( i.e. not supported (yet) ), a bug, or did I overlook some doc. (or source code) ?.
For now, I will try to "emit" the NOTIFY via libpq.
That's because ProcessCompletedNotifies isn't being called. For regular backends it is called inside the top level loop PostgresMain. I think you need to include "commands/async.h" and add a call to ProcessCompletedNotifies() after your background worker commits to make this work.
For the record, Jacques confirmed off-list that this worked, and I also did a couple of tests.
Is this expected? If so, should it be documented -- perhaps with something like the attached? Alternatively there may be some way to make CommitTransactionCommand do it, though the comments in ProcessCompletedNotifies explain why that was rejected, at least as far as AtCommit_Notify goes.
This made me wonder what happens if a background worker calls LISTEN. NotifyMyFrontEnd simply logs the notifications, since there is no remote libpq to sent a message to. Perhaps a way of delivering to background workers could be developed, though of course there are plenty of other kinds of IPC available already.
--
Thomas Munro
http://www.enterprisedb.com
http://www.enterprisedb.com
Вложения
В списке pgsql-hackers по дате отправления: