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