非互換
pg_signal_backendロールからスーパーユーザー所有のバックエンドプロセスへシグナルを送信することが防止されます。
マニュアルでは、スーパーユーザー所有のバックエンドプロセスへシグナルを送信できるのはスーパーユーザーのみとされていましたが、pg_signal_backendロールからも送信できるようになってしまっていました。マニュアル記載の動作に変更します。
postgres=# CREATE OR REPLACE FUNCTION terminate_nothrow(pid int) RETURNS bool postgres-# LANGUAGE plpgsql SECURITY DEFINER SET client_min_messages = error AS $$ postgres$# BEGIN postgres$# RETURN pg_terminate_backend($1); postgres$# EXCEPTION WHEN OTHERS THEN postgres$# RETURN false; postgres$# END$$; CREATE FUNCTION postgres=# ALTER FUNCTION terminate_nothrow OWNER TO pg_signal_backend; ALTER FUNCTION postgres=# SELECT backend_type FROM pg_stat_activity postgres-# WHERE CASE WHEN COALESCE(usesysid, 10) = 10 THEN terminate_nothrow(pid) END; backend_type -------------- autovacuum launcher logical replication launcher (2 rows)
postgres=# CREATE OR REPLACE FUNCTION terminate_nothrow(pid int) RETURNS bool postgres-# LANGUAGE plpgsql SECURITY DEFINER SET client_min_messages = error AS $$ postgres$# BEGIN postgres$# RETURN pg_terminate_backend($1); postgres$# EXCEPTION WHEN OTHERS THEN postgres$# RETURN false; postgres$# END$$; CREATE FUNCTION postgres=# ALTER FUNCTION terminate_nothrow OWNER TO pg_signal_backend; ALTER FUNCTION postgres=# SELECT backend_type FROM pg_stat_activity postgres-# WHERE CASE WHEN COALESCE(usesysid, 10) = 10 THEN terminate_nothrow(pid) END; backend_type -------------- (0 rows)
対処方法
ありません。