Re: [GENERAL] Create Action for psql when NOTIFY Recieved - Mailing list pgsql-general

From Jerry Regan
Subject Re: [GENERAL] Create Action for psql when NOTIFY Recieved
Date
Msg-id A7E46060-A03E-4576-A1DC-05454E875ED1@concertoglobalresources.com
Whole thread Raw
In response to Re: [GENERAL] Create Action for psql when NOTIFY Recieved  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: [GENERAL] Create Action for psql when NOTIFY Recieved  ("Daniel Verite" <daniel@manitou-mail.org>)
List pgsql-general
Tom,

I understand all you’ve said. I was hoping for a different answer. C’est la vie.

I think I could justify the effort to ‘script’ psql. I’m not so sure I can justify the effort to write a standalone program.

At least I have an answer.

Thanks!

/s/jr
Consultant
Concerto GR
Mobile: 612.208.6601

Concerto - a composition for orchestra and a soloist



On 28Aug, 2017, at 6:08 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"David G. Johnston" <david.g.johnston@gmail.com> writes:
On Mon, Aug 28, 2017 at 1:28 PM, Jerry Regan <
jerry.regan@concertoglobalresources.com> wrote:
My concern is how, after LISTENing in psql, I can tell it what to do when
the NOTItFY is received.

​As far as I am aware you cannot.

Yes, and psql is not designed to do anything of its own accord,
so I think the answer is really "use another program".

​"​Whenever a command is executed, psql also polls for asynchronous
notification events generated by LISTEN and NOTIFY."

Exactly.  If you don't feed it a command, it just sits there.

I suspect the feature request would be something like:
\set NOTIFY_PROGRAM './process-notify-request.bash'  (or an equivalent
meta-command)
And psql would invoke said program and pass the content of the notification
payload to it via stdin.

Such a program could only execute after the next time you give a command
to psql.  You could maybe imagine feeding it a continuous stream of dummy
commands, but that's pretty silly (and rather defeats the point of LISTEN,
which is to *not* eat cycles while waiting).

This isn't something that could be easily fixed, AFAICS.  Even if we
wanted to make psql pay attention to asynchronous data arrival, how
would we get control back from libreadline?  And what would happen
if the user had typed a partial line of input?

You really are much better off creating a program that opens its own
connection to the DB and sits there listening.  psql cannot help you
meaningfully with this request, and I can't see a way to make it do
so that wouldn't be a monstrous kluge.

regards, tom lane

pgsql-general by date:

Previous
From: Jerry Regan
Date:
Subject: Re: [GENERAL] Create Action for psql when NOTIFY Recieved
Next
From: Jerry Regan
Date:
Subject: Re: [GENERAL] Create Action for psql when NOTIFY Recieved