On Sat, Mar 11, 2017 at 10:11 AM, Pavel Stehule <pavel.steh...@gmail.com> wrote: > 2017-03-09 14:52 GMT+01:00 Peter Eisentraut > <peter.eisentr...@2ndquadrant.com>: >> >> On 3/8/17 14:22, Pavel Stehule wrote: >> > 1. will be background session process closed automatically when parent >> > process is closed? >> >> If the communications queue goes away the process will eventually die. >> This is similar to how a backend process will eventually die if the >> client goes away. Some more testing would be good here. > > > what means "eventually die"? > > I called pg_sleep() in called subprocess. > > Cancel, terminating parent process has not any effect. It is maybe > artificial test. > > Little bit more realistic - waiting on table lock in background worker was > successful - and when parent was cancelled, then worker process was > destroyed too. > > But when parent was terminated, then background worker process continued. > > What is worse - the background worker had 100% CPU and I had to restart > notebook. > > CREATE OR REPLACE FUNCTION public.foo() > RETURNS void > LANGUAGE plpythonu > AS $function$ > with plpy.BackgroundSession() as a: > a.execute('update foo2 set a = 30') > a.execute('insert into foo2 values(10)') > $function$ > postgres=# > > > I blocked foo2 in another session.
I'm not sure what's going on with this patch set, but in general a background process can't just go away when the foreground process goes away. We could arrange to kill it, a la pg_terminate_backend(), or we can let it keep running, and either of those things might be what somebody wants, depending on the situation. But it can't just vanish into thin air. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers