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

时间:2018-11-08 03:01:48

标签: postgresql google-cloud-sql

主要问题

由于权限不足,我无法执行功能import matplotlib.pyplot as plt %matplotlib inline import numpy as np x= np.zeros(10) #range of X values y= np.arange(-5,5,1) #range of Y values plt.plot(x,y, "ro") plt.show() 来概述查询优化中的更改。 错误消息显示为: SELECT pg_stat_statements_reset();

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

环境

  • PG版本:x86_64-pc-linux-gnu上的PostgreSQL 9.6.6,由gcc(Ubuntu 4.8.4-2ubuntu1〜14.04.3)4.8.4,64位编译
  • 平台:Google Cloud SQL PostgreSQL
  • 用户:具有permission denied for function pg_stat_statements_reset角色的默认postgres用户

尝试的步骤

我找到了关于该主题的先前答案,该答案表明cloudsqlsuperuser应该适用于通过云控制台创建的默认postgres用户。但是,列出的解决方案不起作用,它返回相同的权限被拒绝错误

Related Question

2 个答案:

答案 0 :(得分:0)

Google Cloud SQL支持several modules for PostgreSQL来扩展其功能。

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

在使用扩展程序(模块)之前,必须先安装它:

    来自Cloud Shell的
  1. Connect to the PostgreSQL instance,使用默认的用户:postgres
gcloud sql connect [INSTANCE_ID] --user=postgres
  1. 连接到数据库后,create extension pg_stat_statements
CREATE EXTENSION pg_stat_statements
  1. 执行功能以重置统计信息。 默认情况下,只能由超级用户执行
SELECT pg_stat_statements_reset()

答案 1 :(得分:0)

带有快照:

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;