Re: Allow non-superuser to cancel superuser tasks.

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Kirill Reshke <reshkekirill@gmail.com>
Cc: Nathan Bossart <nathandbossart@gmail.com>, "Andrey M. Borodin" <x4mmm@yandex-team.ru>, "Leung, Anthony" <antholeu@amazon.com>, "pgsql-hackers@postgresql.org" <pgsql-hackers@postgresql.org>
Date: 2024-07-10T05:24:29Z
Lists: pgsql-hackers
On Wed, Jul 10, 2024 at 10:03:04AM +0500, Kirill Reshke wrote:
> The problem is the error message has been changed.
> 
> # DETAIL:  Only roles with privileges of the
> "pg_signal_autovacuum_worker" role may terminate autovacuum workers.'
> #     doesn't match '(?^:ERROR:  permission denied to terminate
> process\nDETAIL:  Only roles with privileges of the
> "pg_signal_autovacuum_worker" role may terminate autovacuum worker
> processes.)'
> # Looks like you failed 1 test of 2.
> 
> I changed the test to match the error message.

The script has two tests, and the CI is failing for the second test
where we expect the signal to be processed:
[12:48:23.370] #   Failed test 'autovacuum worker signaled with
pg_signal_autovacuum_worker granted'
[12:48:23.370] #   at t/006_signal_autovacuum.pl line 90.

It is true that the first test where we expect the signal to not go
through also failed as the DETAIL string has been changed, which is
what you've fixed :)  
--
Michael

Commits

  1. Look up backend type in pg_signal_backend() more cheaply.

  2. Add tap test for pg_signal_autovacuum role

  3. Introduce pg_signal_autovacuum_worker.

  4. Add a slot synchronization function.

  5. Ban role pg_signal_backend from more superuser backend types.