【发布时间】:2018-11-21 04:58:23
【问题描述】:
由于 Google Cloud SQL for 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 实例中执行这些操作?只有 cloudsqladmin 帐户是超级用户,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)
【问题讨论】:
标签: postgresql google-cloud-sql