如何在Google Cloud SQL for PostgreSQL中终止会话?
由于Google Cloud SQL for PostgreSQL没有为我们提供超级用户(甚至不是postgres用户),我看不到其他会话正在从pg_stat_活动运行什么查询,如果需要,我也不能终止其他会话 例如:如何在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
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;