postgresql - Google Cloud SQL PostrgreSQL 上的 pg_stat_statements_reset() 权限被拒绝
问题描述
主要问题
SELECT pg_stat_statements_reset();
由于权限不足,我无法执行该函数来分析查询优化中的更改。错误消息如下:
permission denied for function 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位
- 平台:谷歌云 SQL PostgreSQL
- 用户:具有
cloudsqlsuperuser
角色的默认 postgres 用户
尝试的步骤
我在这个主题上找到了一个先前的答案,它建议pg_stat_statements_reset()
应该从通过云控制台创建的默认 postgres 用户工作。但是,列出的解决方案不起作用,它返回相同的权限被拒绝错误
解决方案
Google Cloud SQL 支持PostgreSQL 的多个模块来扩展其功能。
扩展(模块)之一是:pg_stat_statements。它允许跟踪服务器执行的 SQL 语句的执行统计信息。使用 pg_stat_statements_reset() 来重置统计信息。
在使用扩展(模块)之前,必须安装它:
- 使用默认用户从 Cloud Shell连接到 PostgreSQL 实例:postgres
gcloud sql connect [INSTANCE_ID] --user=postgres
- 连接到数据库时,创建扩展 pg_stat_statements
CREATE EXTENSION pg_stat_statements
- 执行重置统计信息的功能。默认情况下,它只能由超级用户执行:
SELECT pg_stat_statements_reset()
- (可选)授予其他用户重置统计信息的权限:
GRANT EXECUTE ON FUNCTION pg_stat_statements_reset() TO xuser;
推荐阅读
- django - Django Rest Framework 返回一个 JSON 文件
- php - 使用inh PHP查询Mysql数据库时,我只得到50行中的1行
- oop - 无法实例化类
- python - 是否有一种更 Pythonic 的方式来编码这种重复关系:OEIS A077947
- python - 使用 Python 3 对 Google Cloud Datastore 实体进行全文搜索?
- python-3.x - Pygame按键事件按下,不同的事件保持
- azure - Azure VM 网络带宽
- r - 如何在第二个下划线后删除部分行名
- python - 在 Python 中,在没有创建新列表的情况下,按索引从列表中删除元素的最佳方法是什么?
- dialogflow-es - DialogFlow - 如何从不同的意图给出相同的响应?