sigint psql
I'm communicating with psql via a pipe stream. This works pretty well,
but one problem I have is trying to cancel an operation. If I send a
sigint, psql dies. In looking at the source I gather this is because it
assumes I'm in non-interactive mode (pset.notty is true). I was
wondering if there was some way to work around this short of
recompiling the source. I need to do the same thing on Windows.
Thanks for any suggestions,
John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL
John DeSoi <desoi@pgedit.com> writes:
I'm communicating with psql via a pipe stream. This works pretty well,
but one problem I have is trying to cancel an operation. If I send a
sigint, psql dies. In looking at the source I gather this is because
it assumes I'm in non-interactive mode (pset.notty is true). I was
wondering if there was some way to work around this short of
recompiling the source. I need to do the same thing on Windows.Thanks for any suggestions,
On Unix you could run 'psql' through a pty rather than a pipe. No
idea what the Windows equivalent would be.
-Doug
Doug McNaught wrote:
John DeSoi <desoi@pgedit.com> writes:
I'm communicating with psql via a pipe stream. This works pretty well,
but one problem I have is trying to cancel an operation. If I send a
sigint, psql dies. In looking at the source I gather this is because
it assumes I'm in non-interactive mode (pset.notty is true). I was
wondering if there was some way to work around this short of
recompiling the source. I need to do the same thing on Windows.Thanks for any suggestions,
On Unix you could run 'psql' through a pty rather than a pipe. No
idea what the Windows equivalent would be.
We don't have signals on win32 like we have on Unix so we simulate them.
Not sure it is possible to signal psql like you want on Win32.
I just tried 'kill -2 _psql_pid_' on unix and it did cancel the current
query.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
I'm communicating with psql via a pipe stream. This works
pretty well,
but one problem I have is trying to cancel an operation.
If I send a
sigint, psql dies. In looking at the source I gather this
is because
it assumes I'm in non-interactive mode (pset.notty is true). I was
wondering if there was some way to work around this short of
recompiling the source. I need to do the same thing on Windows.Thanks for any suggestions,
On Unix you could run 'psql' through a pty rather than a pipe. No
idea what the Windows equivalent would be.We don't have signals on win32 like we have on Unix so we
simulate them.
Not sure it is possible to signal psql like you want on Win32.
There is no way so signal *psql*, as in the client side process. The
signal emulation only runs in the server.
You can do the same thing in the server using pg_ctl kill, but that
won't work on client processes.
//Magnus
Import Notes
Resolved by subject fallback
On Feb 21, 2005, at 3:00 PM, Magnus Hagander wrote:
There is no way so signal *psql*, as in the client side process. The
signal emulation only runs in the server.You can do the same thing in the server using pg_ctl kill, but that
won't work on client processes.
Thanks to everyone for the feedback and suggestions. Since I need this
to work on win32, I guess I'll just abort the stream and reconnect. The
main issue with this is trying to restore any state associated with the
connection (e.g. search_path).
John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL
Hi Magnus,
On Feb 21, 2005, at 3:00 PM, Magnus Hagander wrote:
There is no way so signal *psql*, as in the client side process. The
signal emulation only runs in the server.
But is there some equivalent of pressing ctrl-C to make psql stop what
it is doing? For example, through the pipe stream I may execute a \i
command and the user wants to stop before the file is processed. What
mechanism is used to do this on win32? I thought it could be
accomplished on Unix with kill -2, hence my original question. But
maybe I'm looking in the wrong place.
Thanks,
John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL
John DeSoi wrote:
Hi Magnus,
On Feb 21, 2005, at 3:00 PM, Magnus Hagander wrote:
There is no way so signal *psql*, as in the client side process. The
signal emulation only runs in the server.But is there some equivalent of pressing ctrl-C to make psql stop what
it is doing? For example, through the pipe stream I may execute a \i
command and the user wants to stop before the file is processed. What
mechanism is used to do this on win32? I thought it could be
accomplished on Unix with kill -2, hence my original question. But
maybe I'm looking in the wrong place.
Win32 doesn't have the granularity to do special signal numbers like we
do on Unix, so we have to map control-C to call a special libpq function
that communicates with the postmaster/backend to cancel the query. No
way an outside process can do that.
Your only solution would be to hack psql to accept a signal somehow to
call that libpq function, and hack your client to send that signal to
psql somehow.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
There is no way so signal *psql*, as in the client side process. The
signal emulation only runs in the server.But is there some equivalent of pressing ctrl-C to make psql stop what
it is doing? For example, through the pipe stream I may execute a \i
command and the user wants to stop before the file is processed. What
mechanism is used to do this on win32? I thought it could be
accomplished on Unix with kill -2, hence my original question. But
maybe I'm looking in the wrong place.
Take a look at GenerateConsoleCtrlEvent(). It can generate a fake
Ctrl-C. You'll need to figure out a console group etc, and I can't say
I've tested it, but it looks like a possible.
//Magnus
Import Notes
Resolved by subject fallback