Поскольку Google Cloud SQL для PostgreSQL не предоставляет нам суперпользователя (даже пользователя postgres), я не могу видеть, какие запросы выполняются другими сеансами из pg_stat_activity, и не могу прекратить другие сеансы, если это необходимо.
Например:
postgres@testdb=> select pg_terminate_backend(1584);
ERROR: 42501: must be a member of the role whose process is being terminated or member of pg_signal_backend
LOCATION: pg_terminate_backend, misc.c:319
Time: 23.800 ms
Без истинного доступа суперпользователя, как мы можем сделать это в экземплярах Cloud SQL PostgreSQL?Только учетная запись cloudqladmin является суперпользователем и AFAIK Я не могу этого сделать:
postgres@testdb=> \dg
List of roles
Role name | Attributes | Member of
-------------------+------------------------------------------------------------+---------------------
cloudsqladmin | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
cloudsqlagent | Create role, Create DB | {cloudsqlsuperuser}
cloudsqlreplica | Replication | {}
cloudsqlsuperuser | Create role, Create DB | {}
don | Create role, Create DB | {cloudsqlsuperuser}
postgres | Create role, Create DB | {cloudsqlsuperuser}
postgres@testdb=> set role cloudsqladmin;
ERROR: 42501: permission denied to set role "cloudsqladmin"
LOCATION: call_string_check_hook, guc.c:9803
Time: 25.293 ms
FWIW, вы можете прекратить сеанс, если вы войдете в систему как пользователь этого сеанса.Пользователи могут прекратить любой из своих сеансов, стандартный материал PostgreSQL.
postgres@postgres=> select pg_terminate_backend(23644);
ERROR: 42501: must be a member of the role whose process is being terminated or member of pg_signal_backend
LOCATION: pg_terminate_backend, misc.c:319
don@postgres=> select pg_terminate_backend(23644);
pg_terminate_backend
----------------------
t
(1 row)