使用 Google Cloud SQL 重置 pg_stat_statements

问题描述 投票:0回答:2

我正在使用在 Google Cloud SQL 中运行的 PostgreSQL 实例。

我正在尝试重置 pg_stat_statements 因为我们对表进行了改进并添加了一些索引。不幸的是,当我尝试使用主

postgres
用户运行以下命令时:

select pg_stat_reset();

我收到以下错误消息:

ERROR:  permission denied for function pg_stat_reset

我知道这是一项托管服务,有些东西需要隔离,但能够重置 pg_stat 以便调整数据库非常重要。基本上,如果您进行更改,您需要能够重置 pg_stat,以便其输出不会受到更改之前的数据污染。即使在托管服务中,这种调整也是至关重要的。

有人知道如何让它与 Google Cloud SQL 一起使用吗?

谢谢。

postgresql google-cloud-platform google-cloud-sql
2个回答
5
投票

我向 GoogleCloud 支持询问了此事,他们得到的回复如下:

pg_stat_reset() 需要超级用户权限。但它不支持 云SQL。我们建议您使用 pg_stat_statements_reset() 函数而不是重置统计数据。为此,任一用户都必须 从 Cloud Console 创建(即默认 PostgreSQL 用户),或者 默认情况下应授予此函数的 EXECUTE 权限 PostgreSQL用户通过执行以下命令:grantexecuteon 函数 pg_stat_statements_reset() 为 ;

我能够使用 postgres 用户成功使用此命令。请注意,此函数必须在启用了 pg_stat_statement 的数据库上运行。


0
投票

虽然您无法在CloudSQL中运行您想要的功能,但是您可以通过使用

pg_stat_reset_single_table_counters
函数重置各个索引统计信息来达到相同的效果。您需要以具有
cloudsqlsuperuser
角色的用户身份登录,并且不能将此功能的 EXECUTE 权限授予其他用户。要重置非 postgres 表的所有索引,请运行以下查询:

select relname, pg_stat_reset_single_table_counters(oid)
from pg_class 
where reltype=0 
and relname not like 'pg_%';
© www.soinside.com 2019 - 2024. All rights reserved.