Re: Change pg_cancel_*() to ignore current backend

From: Andres Freund <andres(at)anarazel(dot)de>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com>, Jon Nelson <jnelson+pgsql(at)jamponi(dot)net>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>, "david(dot)g(dot)johnston(at)gmail(dot)com >> David G Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Subject: Re: Change pg_cancel_*() to ignore current backend
Date: 2015-05-21 00:46:51
Message-ID: 20150521004651.GW27868@alap3.anarazel.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On 2015-05-20 20:38:51 -0400, Tom Lane wrote:
> Jim Nasby <Jim(dot)Nasby(at)BlueTreble(dot)com> writes:
> > On 5/20/15 6:56 PM, Andres Freund wrote:
> >> On 2015-05-20 18:48:59 -0500, Jim Nasby wrote:
> >>> and generally if you want to terminate the connection there's easier
> >>> ways to do that then "SELECT pg_terminate_backend(pg_backend_pid())".
>
> >> Which would be what exactly? Say, you're inside a security definer
> >> function.
>
> > Error isn't good enough so you want to kill the backend?

Yep.

> > I hadn't considered that; what's the common use case for it?

I've seen it basically in two cases:
1) The "role" of the server has changed in some way, and some function
wants to force a reconnect. Say a former master that's now a logical
replication (in that case IIRC londiste) standby, and a trigger was
installed to rediredt existing writers.
2) A function detects that something has has gone rather wrong with a
session state and wants to force a reconnect. I've seen this in a
"handwritten" RLS implementation.

> > ISTM it'd be better
> > to allow elog to log and then terminate the backend, but of course that
> > doesn't help with backwards compatibility. :/
>
> That's spelled elog(FATAL), no?

Which is, to my knowledge, inaccessible from at least plpgsql.

I've a hard time believing it's actually a good idea to change this. It
pretty much seems to only be useful if you're doing unqualified SELECT
pg_cancel_backend(pid) FROM pg_stat_activity; type queries. I don't see
that as something we need to address.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andres Freund 2015-05-21 01:12:29 Re: Re: [COMMITTERS] pgsql: Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE.
Previous Message Tom Lane 2015-05-21 00:38:51 Re: Change pg_cancel_*() to ignore current backend