2015-09-17 16:37 GMT+02:00 Pavel Stehule <pavel.steh...@gmail.com>:

>
>
> 2015-09-17 16:06 GMT+02:00 Shulgin, Oleksandr <
> oleksandr.shul...@zalando.de>:
>
>> On Thu, Sep 17, 2015 at 12:06 PM, Pavel Stehule <pavel.steh...@gmail.com>
>> wrote:
>>
>>>
>>>> That won't work really well with something like I use to do when
>>>> testing this patch, namely:
>>>>
>>>> postgres=# select pid, array(select pg_cmdstatus(pid, 1, 10)) from
>>>> pg_stat_activity where pid<>pg_backend_pid() \watch 1
>>>>
>>>> while also running pgbench with -C option (to create new connection for
>>>> every transaction).  When a targeted backend exits before it can handle the
>>>> signal, the receiving process keeps waiting forever.
>>>>
>>>
>>> no - every timeout you have to check, if targeted backend is living
>>> still, if not you will do cancel. It is 100% safe.
>>>
>>
>> But then you need to make this internal timeout rather short, not 1s as
>> originally suggested.
>>
>
> can be - 1 sec is max, maybe 100ms is optimum.
>
>>
>> The statement_timeout in this case will stop the whole select, not just
>>>> individual function call.  Unless you wrap it to set statement_timeout and
>>>> catch QUERY_CANCELED in plpgsql, but then you won't be able to ^C the whole
>>>> select.  The ability to set a (short) timeout for the function itself
>>>> proves to be a really useful feature to me.
>>>>
>>>
>>> you cannot to handle QUERY_CANCELED in plpgsql.
>>>
>>
>> Well, you can but its not that useful of course:
>>
>
> hmm, some is wrong - I remember from some older plpgsql, so CANCEL message
> is not catchable. Maybe I have bad memory. I have to recheck it.
>

it is ok. I didn't remeber well this behave. You cannot to catch CANCEL
(and today ASSERT) in OTHER handler. It can be handled if it is explicitly
mentioned.

Regards

Pavel

Reply via email to