如何在Google Cloud SQL for PostgreSQL中终止会话?

如何在Google Cloud SQL for PostgreSQL中终止会话?,postgresql,google-cloud-sql,Postgresql,Google Cloud Sql,由于Google Cloud SQL for PostgreSQL没有为我们提供超级用户(甚至不是postgres用户),我看不到其他会话正在从pg_stat_活动运行什么查询,如果需要,我也不能终止其他会话 例如: postgres@testdb=> select pg_terminate_backend(1584); ERROR: 42501: must be a member of the role whose process is being terminated or memb

由于Google Cloud SQL for PostgreSQL没有为我们提供超级用户(甚至不是postgres用户),我看不到其他会话正在从pg_stat_活动运行什么查询,如果需要,我也不能终止其他会话

例如:

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
如果没有真正的超级用户访问权限,我们如何在云SQL PostgreSQL实例中执行这些操作?只有cloudsqladmin帐户是超级用户,而且我不能成为:

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)

在云SQL中,无法将超级用户角色授予PostgreSQL用户。{1}

在任何情况下,您都可以在Cloud Console的Cloud SQL部分的图形和日志中查阅有关实例的信息。{2}

{1} :

{2} :

说:

pg\u terminate\u后端(pid int)
-终止后端。如果调用角色是其后端被终止的角色的成员,或者调用角色已被授予
pg\u signal\u backend
,则也允许这样做,但是只有超级用户可以终止超级用户后端

当您是Google的
cloudsqlsuperuser
(默认为
gcloud sql用户创建
)的成员时,您可以授予自己:

GRANT pg_signal_backend TO myuser;
然后,您可以终止除超级用户以外的任何会话:

SELECT pg_terminate_backend(pid), * FROM pg_stat_activity
WHERE usename = 'rogue_user' AND pid <> pg_backend_pid();

我早些时候曾试图发表评论,但显然已经不见了。让我们再试一次。如果你是链接{2},它可能不会向我显示僵尸查询或阻塞锁之类的内容。我需要了解pg_stat_活动,这在Google Cloud SQL中是不存在的(用户名和应用程序除外)。我需要客户端地址/主机名、连接和查询开始时间以及查询本身。不管怎样,即使我确实掌握了这些信息,作为DBA,仍然没有任何机制可以让我终止需要终止的会话。你可以在这里查看状态和更新:谢谢,我也在google cloud sql讨论google Groups论坛上提交了这篇文章,得到了一个基本上依赖于始终是同一个用户的回复。
GRANT other TO me;