ページの先頭行へ戻る
Enterprise Postgres 17 リリース情報

2.3.81 スーパーユーザー所有のバックエンドプロセスへのシグナル送信の防止

非互換

pg_signal_backendロールからスーパーユーザー所有のバックエンドプロセスへシグナルを送信することが防止されます。

マニュアルでは、スーパーユーザー所有のバックエンドプロセスへシグナルを送信できるのはスーパーユーザーのみとされていましたが、pg_signal_backendロールからも送信できるようになってしまっていました。マニュアル記載の動作に変更します。

Fujitsu Enterprise Postgres 15以前の場合
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)
Fujitsu Enterprise Postgres 16の場合
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)

対処方法

ありません。