Unix Technical Forum

Re: sigint psql

This is a discussion on Re: sigint psql within the pgsql Hackers forums, part of the PostgreSQL category; --> >> > I'm communicating with psql via a pipe stream. This works >pretty well, >> > but one problem ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Hackers

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-11-2008, 03:48 AM
Magnus Hagander
 
Posts: n/a
Default Re: 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,

>>
>> 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

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 04-11-2008, 03:48 AM
John DeSoi
 
Posts: n/a
Default Re: sigint psql


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


---------------------------(end of broadcast)---------------------------
TIP 2: you can get off all lists at once with the unregister command
(send "unregister YourEmailAddressHere" to majordomo@postgresql.org)

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 04-11-2008, 03:48 AM
John DeSoi
 
Posts: n/a
Default Re: sigint psql

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


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 04-11-2008, 03:48 AM
Bruce Momjian
 
Posts: n/a
Default Re: sigint psql

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

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 03:05 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.UnixAdminTalk.com