plsh icon indicating copy to clipboard operation
plsh copied to clipboard

pg_terminate_backend and pg_cancel_backend propagation

Open Sakiand opened this issue 5 years ago • 0 comments

Scenario: plsh function that runs a script with plsql commands. For example: create or replace function sp_fact_maintenance_run(get_start_date date DEFAULT (((last_day(('now'::text)::date) - '1 mon'::interval) + '1 day'::interval))::date, get_end_date date DEFAULT (('now'::text)::date - 1)) returns void language plsh as $$ #!/bin/sh export HOME=/var/lib/postgresql echo "#!/bin/sh" > /var/scripts/fact_maintenance.sh psql -d dwh -c "select sp_fact_maintenance_generate(get_start_date := '$1',get_end_date := '$2' );" parallel -j 40 :::: /var/scripts/fact_maintenance.sh $$;

this function generates and runs a file that containing psql commands. The fact_maintenance.sh file looks like: #!/bin/sh psql -d dwh -c "some command" psql -d dwh -c "some command" psql -d dwh -c "some command" psql -d dwh -c "some command" ......

So after you are launching sp_fact_maintenance_run() you see in pg_stat_activity the parent process of sp_fact_maintenance_run() and 40 processes running concurrently of "some command". So far so good.

The problem is that in case sp_fact_maintenance_run() is canceled or terminated the "some command"'s still running. So there is no cancel/terminate propagation.

Sakiand avatar Oct 21 '20 03:10 Sakiand