Problem Using PQcancel in a Synchronous Query
От | Eric Simon |
---|---|
Тема | Problem Using PQcancel in a Synchronous Query |
Дата | |
Msg-id | B5583D9A92B841D38FDC5B3C5B8F67F7@Masterchief обсуждение исходный текст |
Ответы |
Re: Problem Using PQcancel in a Synchronous Query
|
Список | pgsql-hackers |
Hi, I am using Perl (DBD::Pg) with Postgres. DBD::Pg already fully supports asynchronous queries, and the canceling of those queries, but I need to cancel a synchronous query. So to do that, I am trying to write $sth->cancel() support for DBD::Pg. Here's my example in Perl: my $aborted = 0;my $action = POSIX::SigAction->new( sub {$sth->cancel; $aborted = 1}, POSIX::SigSet->new(SIGALRM));my$oldaction = POSIX::SigAction->new;POSIX::sigaction(SIGALRM,$action,$oldaction); my $sth = $dbh->prepare('SELECT id FROM user_session FOR UPDATE');alarm(10); # wait 10 seconds before time out$sth->execute;alarm(0);# cancel alarm (if execute worked fast) POSIX::sigaction(SIGALRM,$oldaction); # restore original handlerwarn "warning: query timed out" if $aborted; Now that I've established some context, here's where I'm at: I've written $sth->cancel() for DBD::Pg using PQcancel(), and it works (it returns the status 57014: QUERY CANCELED). The problem is that the $sth->execute call (which resides between the two alarm() calls above) doesn't continue on, but rather stays frozen, waiting for data. Does PQcancel not communicate back to the execute statement so that it unblocks? -- Eric Simon The IQ Group, Inc.
В списке pgsql-hackers по дате отправления: