pg_stat_statements_reset()权限在Google Cloud SQL PostrgreSQL上被拒



主要问题

由于权限不足,我无法执行函数SELECT pg_stat_statements_reset();来分析查询优化中的更改。错误消息显示:permission denied for function pg_stat_statements_reset

我想知道是否有其他方法可以重置Cloud SQL PostgreSQL上的pg_stats?

环境

  • PG版本:PostgreSQL 9.6.6 on x86_64-pc-linux-gnu,由gcc编译(Ubuntu 4.8.4-2ubuntu14.04.3(4.8.4,64位
  • 平台:Google Cloud SQL PostgreSQL
  • 用户:具有cloudsqlsuperuser角色的默认postgres用户

尝试的步骤

我已经找到了以前关于这个主题的答案,建议pg_stat_statements_reset()应该在通过云控制台创建的默认postgres用户中工作。然而,列出的解决方案不起作用,它返回相同的拒绝权限错误

相关问题

Google Cloud SQL支持PostgreSQL的几个模块来扩展其功能。

其中一个扩展(模块(是:pg_stat_statements。它允许跟踪服务器执行的SQL语句的执行统计信息。要重置统计信息,请使用pg_stat_statements_reset((函数。

在使用扩展(模块(之前,必须安装:

  1. 使用默认的user:postgres从Cloud Shell连接到PostgreSQL实例
gcloud sql connect [INSTANCE_ID] --user=postgres
  1. 连接到数据库时,创建扩展pg_stat_statements
CREATE EXTENSION pg_stat_statements
  1. 执行函数以重置统计信息默认情况下,它只能由超级用户执行
SELECT pg_stat_statements_reset()
  1. (可选(授予其他用户重置统计数据的权限:
GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO xuser;

带快照:

DROP TABLE IF EXISTS stat_snap_1;
DROP TABLE IF EXISTS stat_snap_2;
-- first time
CREATE TABLE stat_snap_1 AS SELECT * FROM pg_stat_statements WHERE queryid IS NOT NULL;
-- second time
CREATE TABLE stat_snap_2 AS SELECT * FROM pg_stat_statements WHERE queryid IS NOT NULL;
SELECT s2.calls - s1.calls, s2.total_time - s1.total_time, s2.*, s1.*
FROM stat_snap_2 s2
FULL OUTER JOIN stat_snap_1 s1 ON s1.queryid = s2.queryid
ORDER BY s2.total_time - s1.total_time DESC NULLS LAST;

相关内容

  • 没有找到相关文章

最新更新